有人会认为这段简单的代码应该很容易编译:
#include <utility>
struct Q {
static const int X = 0;
};
int main() {
std::pair<int, int>(Q::X, 0);
return 0;
}
但是,当我用g++
使用默认设置(cygwin gcc 4.5.3)编译它时,它会向我抛出一个链接器错误:
undefined reference to `Q::X'
我在这里完全难过 - MSVC编译得很好但我的gcc没有。 (MinGW也可以。)
答案 0 :(得分:3)
链接器无法找到Q::X
的定义。
这可能是因为std::pair<>
构造函数将参数作为const的引用,而Q::X
是l值,因此它需要Q::X
的外部定义才能引用这一点。
便携式修复:
int const Q::X;
答案 1 :(得分:1)
您只声明X,但您还必须定义它,对于静态定义,必须在类
之外进行定义struct Q {
static const int X = 0;
};
int Q::X = 0;
答案 2 :(得分:1)
@Maxim Yegorushkin(打败我!)Here是一个可能有用的相关链接。
但是你的问题是int永远不是外部定义的。如果X不必是const,则可以以类似的方式在结构外部初始化它。主要原因是因为X是静态的......
struct Q {
static const int X;
};
int const Q::X = 0;
struct Q {
static int X;
};
int Q::X = 0;