error: ISO C++ forbids in-class initialization of non-const static member ‘A::a’ static int a = 0;
时间: 2024-03-09 19:48:55 浏览: 212
这个错误是因为你在类内部对非常量的静态成员变量进行了初始化,而这种方式只适用于整型常量和枚举常量。如果你想对非常量的静态成员变量进行初始化,可以在类外部进行初始化,例如:
```
class A {
public:
static int a;
};
int A::a = 0; // 在类外部进行初始化
int main() {
// 使用 A::a
return 0;
}
```
在类外部进行初始化可以避免在类的多个实例中重复定义静态成员变量。
相关问题
E:\bird\bird\bird\barrier.h:31: error: ISO C++ forbids in-class initialization of non-const static member 'barrier::score' static int score=0; ^
对不起,我之前的回答有误。根据错误消息提示,C++标准不允许在类定义中对非常量静态成员变量进行初始化。
要解决这个问题,你可以将静态成员变量的初始化移到类外部的源文件中。在源文件中,你可以使用类名加作用域解析运算符 `::` 来初始化静态成员变量。例如:
```cpp
// 在 barrier.cpp 或其他源文件中
int barrier::score = 0;
```
请确保在源文件中有类外部的静态成员变量的定义,并且不要在类定义中进行初始化。这样,你就可以解决这个编译错误。对于静态成员变量的初始化,只能在类外部的源文件中进行。非常抱歉之前的误导,希望这次能够帮到你。
g++编译代码报错hw_cardreader.cpp:35:84: error: ISO C++ forbids declaration of ‘HW_OpenDevice’ with no type [-fpermissive] extern "C" HW_OpenDevice(int reserve_1, int reserve_2, int reserve_3, int reserve_4)
这个错误是因为你没有在 `HW_OpenDevice` 函数之前声明函数的返回类型。你需要在函数名之前加上返回类型,例如 `void HW_OpenDevice(int reserve_1, int reserve_2, int reserve_3, int reserve_4)`。如果你不确定该函数的返回类型,请参考该函数的文档或者查看该函数的实现。此外,你也可以在编译器选项中加上 `-fpermissive` 选项来允许这种不规范的声明方式,但这并不是一个好的解决方案,因为这可能会导致其他问题。
阅读全文