头文件和静态变量中的类声明

时间:2012-08-17 17:45:18

标签: c++ class initialization header-files static-members

Noob提问,但想了解以下内容:

想象一下,我有一个多文件项目。我在头文件中指定,以便在项目中的所有文件之间共享,我写这个:static int test = 0;并在下一行这个:static const int MAX = 4;

由于一个定义规则,第一个尝试编译会出错。但第二个将编译没有错误。为什么呢?

据我所知,两者都具有相同的属性:整个执行存储持续时间,类范围和无链接。

任何帮助?

编辑:在标题中测试外部常量声明:extern const int MAX = 4;强制外部链接产生预期错误。所以我不明白为什么变量它给了我错误,而常量却没有。

2 个答案:

答案 0 :(得分:2)

尝试

static const int test = 0;

我有时会注意到头文件中立即初始化静态const变量的编译器错误。您始终可以在标题

中使用声明
class MyClass
{
    // ...
    static const int test;
    // ...
}

并在相应的.cpp文件中初始化它

const int MyClass::test = 0;

这也适用于除int以外的任何其他类型。

答案 1 :(得分:1)

C ++中的整数常量实际上并不占用对象中的任何空间,并且通常不像变量那样起作用。想想它们更像是在这个特定背景下给出名字的数字。