未定义的引用std :: pair

时间:2013-07-15 09:10:23

标签: c++ gcc g++ std-pair

有人会认为这段简单的代码应该很容易编译:

#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也可以。)

3 个答案:

答案 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;