据我了解,C++允许在类内定义静态常量成员,只要它是整数类型。
那么为什么以下代码会导致链接器错误呢?
#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。
inline const int N = 10
,据我所知,它仍然有一个由链接器定义的存储位置。关键字 inline 在此情况下也可以用于在类定义测试中提供静态变量_定义_。 - Wormer