初始化静态变量时出现语法错误

时间:2011-12-11 02:32:54

标签: c++ static constructor compiler-errors

定义了两个类..

    class Dictionary
    {
    public:
        Dictionary();
        Dictionary(int i);
// ...
    };

    class Equation
    {
        static Dictionary operator_list(1);
// ...

    };

但问题是,每当我编译它时,我都会得到一个奇怪的错误消息

  

错误C2059:语法错误:'常量'

但是当我在operator_list上使用默认构造函数时,它编译得很好。

3 个答案:

答案 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