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

Syntax error when initializing a static variable

本文关键字:语法 错误 静态 变量 初始化      更新时间:2023-10-16

定义了两个类。

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

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

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

错误

C2059:语法错误:"常量">

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

在C++中,不能将声明和初始化结合起来。当你不指定operator_list的构造函数参数时,你不调用它的默认构造函数:你只是声明它。您还需要在相应的C++文件中对其进行初始化,如下所示:

等式

h
class 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