我的理解是,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。
char
,您可以将其定义为constexpr static const char &N = "n"[0];
。注意&
。我猜这可行,因为文字字符串是自动定义的。不过,我对此有点担心-在不同翻译单元之间的头文件中,它的行为可能会很奇怪,因为字符串可能位于多个不同的地址。
inline const int N = 10
我所知,它仍然在链接器定义的位置存储。在这种情况下,也可以使用关键字内联在类定义测试中提供静态变量定义。