初始化静态变量时出现语法错误
Syntax error when initializing a static variable
定义了两个类。
class Dictionary
{
public:
Dictionary();
Dictionary(int i);
// ...
};
和
class Equation
{
static Dictionary operator_list(1);
// ...
};
但问题是,每当我编译它时,我都会收到一条奇怪的错误消息
错误C2059:语法错误:"常量">
但是当我在operator_list上使用默认构造函数时,它编译得很好。
在C++中,不能将声明和初始化结合起来。当你不指定operator_list
的构造函数参数时,你不调用它的默认构造函数:你只是声明它。您还需要在相应的C++文件中对其进行初始化,如下所示:
等式
hclass Equation {
static Dictionary operator_list;
};
等式.cpp:
Dictionary Equation::operator_list(1);
请注意,CPP 文件中没有static
:它不是设计使然。编译器已经从声明中知道operator_list
是静态的。
编辑:您可以选择整型和枚举类型的静态常量成员:您可以在 CPP 文件中初始化它们,如上例所示,也可以在标头中为它们提供一个值。您仍然需要在C++文件中定义该成员,但不得在定义时为其指定值。
static Dictionary operator_list();
是一个函数签名,它声明一个返回Dictionary
并且不带参数的函数,这就是你的编译器让你这样做的原因。
失败static Dictionary operator_list(1);
原因是无法在类的声明中设置复杂类型的值。您需要在其他地方执行此操作(例如在.cpp中(
有关更多信息,请参阅此帖子:https://stackoverflow.com/a/3792427/103916
#include <iostream>
using namespace std;
class Dictionary
{
public:
Dictionary() {}
Dictionary(int i):page(i) {}
void display() { cout << "page is " << page << endl; }
private:
int page;
};
class Equation
{
public:
static Dictionary operator_list;
};
Dictionary Equation::operator_list(1); // static members must be initialized this way...
int main()
{
Equation::operator_list.display();
}
输出为:
page is 1
相关文章:
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- "错误 C0000:语法错误,令牌"<EOF>"处出现意外$end,并且不确定
- 我该怎么做才能摆脱使用命名空间时的语法错误?
- 如何摆脱错误c2061;语法错误 cout?
- 语法错误:D3DX10Core 中的标识符'TEXTMETRICA'
- 错误 C2146:语法错误:标识符"A1"之前缺少","
- main.cpp(11):错误 C2059:语法错误:"字符串"
- RedisGraph 语法错误在偏移量 8 靠近"创建"
- 如何修复此 FSM C++语法错误 C3867
- 函数错误 C2059:语法错误:'>'不起作用
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- c++default-int中的语法错误
- "pip install openexr"上的语法错误:错误的编译器?
- 为什么我收到语法错误:在"*"之前缺少";"
- 错误 C2059:语法错误:从结构成员声明'constant'
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 我正在调试这个C++程序.编译器不再显示语法错误,但存在隐藏的逻辑错误