在c++中使用typedef void VOID;报错C2120对于所有类型void非法
时间: 2024-04-27 20:24:08 浏览: 204
在C++中,void是一种合法的类型,不需要使用typedef重新定义。因此,将void重新定义为VOID可能会导致编译错误C2120,提示对于所有类型void非法。如果你想定义一个void类型的别名,可以直接使用typedef void MyVoid;等价于typedef void VOID;。这样定义后,就可以使用MyVoid作为void的别名来定义变量、函数参数、函数返回类型等。但是需要注意,使用别名来代替已有的类型可能会导致代码可读性降低,建议只在特定场景下使用。
相关问题
VS2019 C++ typedef void (*FunctionPtr)(); 这是个什么意思
`typedef void (*FunctionPtr)()` 是C++中的一种类型别名声明,它的目的是为了简化对函数指针类型的表示。这里分解一下:
- `void`: 表示这个函数没有返回值,即它不返回任何数据类型。
- `(*FunctionPtr)` 是函数指针的语法,*前面的星号(*)表示这是一个指向函数的指针。FunctionPtr是一个变量名,可以用来存储这样的函数指针。
- ()放在类型后面,表示这是一种函数类型,它接受没有任何参数并且不需要返回值的函数。
所以,当你有一个`FunctionPtr`类型的变量时,你可以将任何无返回值的函数地址赋给它,比如`void myFunction() {}`,然后通过`FunctionPtr ptr = &myFunction;` 来存储这个函数的地址,以便稍后调用。
举个例子:
```cpp
void sayHello() {
cout << "Hello!" << endl;
}
typedef void (*HelloFunc)();
int main() {
HelloFunc helloPointer = &sayHello; // 存储sayHello函数的地址
helloPointer(); // 调用sayHello函数
return 0;
}
```
typedef void (*)() UserDefineFunction;C++如何修改这个函数
在C++中,`typedef`关键字用于创建别名,使得已存在的类型名称具有新的名字。在这个例子中,`void (*)()` 是一个指向无参数无返回值函数的指针类型。`UserDefineFunction` 可以看作是对这种类型的别名。
如果你想修改这个函数,比如增加一个参数或者改变返回类型,你需要重新定义一个新的函数类型。例如,假设你想创建一个接受一个整数参数并返回无类型结果的新函数,你可以这样做:
```cpp
// 新定义一个带参数的函数类型
typedef void (*NewFunc)(int);
// 定义一个具体的函数实现
void newFunction(int param) {
cout << "Received parameter: " << param << endl;
}
// 创建 NewFunc 类型的函数指针
NewFunc newUserFunction = &newFunction;
// 调用新函数
newUserFunction(10); // 输出:Received parameter: 10
```
这样,`NewFunc` 类型就代表了一个新的函数签名,允许你在代码中使用不同的行为。请注意,这并不影响原始的 `void (*)()` 类型,它们仍然是无参数无返回值函数的指针。
阅读全文