定义了两个类..
class Dictionary
{
public:
Dictionary();
Dictionary(int i);
// ...
};
和
class Equation
{
static Dictionary operator_list(1);
// ...
};
但问题是,每当我编译它时,我都会得到一个奇怪的错误消息
错误C2059:语法错误:'常量'
但是当我在operator_list上使用默认构造函数时,它编译得很好。
答案 0 :(得分:3)
在C ++中,您无法组合声明和初始化。如果不指定operator_list
的构造函数参数,则不要调用其默认构造函数:只需声明它即可。您还需要在相应的C ++文件中初始化它,如下所示:
Equation.h
class Equation {
static Dictionary operator_list;
};
Equation.cpp:
Dictionary Equation::operator_list(1);
请注意CPP文件中没有static
:它不是设计上的。编译器已经从声明中知道operator_list
是静态的。
编辑:您可以选择具有整数和枚举类型的静态常量成员:您可以在CPP文件中初始化它们,如上例所示,或者您可以在标题中为它们指定值。您仍然需要在C ++文件中定义该成员,但是在定义时不能给它一个值。
答案 1 :(得分:2)
static Dictionary operator_list();
是一个函数签名,声明函数返回Dictionary
并且不带参数,这就是你的编译器允许你这样做的原因。
static Dictionary operator_list(1);
失败的原因是因为您无法在类的声明中设置复杂类型的值。您需要在其他地方(例如.cpp)
有关详细信息,请参阅此帖子:https://stackoverflow.com/a/3792427/103916
答案 2 :(得分:2)
#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