【发布时间】:2011-03-02 20:16:33
【问题描述】:
我的理解是 C++ 允许在类中定义静态 const 成员,只要它是整数类型。
那么,为什么下面的代码会给我一个链接器错误?
#include <algorithm>
#include <iostream>
class test
{
public:
static const int N = 10;
};
int main()
{
std::cout << test::N << "\n";
std::min(9, test::N);
}
我得到的错误是:
test.cpp:(.text+0x130): undefined reference to `test::N'
collect2: ld returned 1 exit status
有趣的是,如果我注释掉对 std::min 的调用,代码编译和链接就好了(尽管前一行也引用了 test::N)。
知道发生了什么吗?
我的编译器是 Linux 上的 gcc 4.4。
【问题讨论】:
-
在 Visual Studio 2010 上运行良好。
-
这个确切的错误在gcc.gnu.org/wiki/…进行了解释
-
这个问题表明 C++ 对“不要将#defines 用于常量”的回答仍然很差。
-
@JohannesOvermann 在这方面,我想提一下自 C++17
inline const int N = 10以来对全局变量使用内联,据我所知,它仍然有一个由链接器定义的存储空间。在这种情况下,也可以使用关键字 inline 在类定义测试中提供静态变量 definition。 -
如何在另一个类中使用静态 const int 变量?
标签: c++ static declaration definition