【问题标题】:Undefined reference std::pair未定义的引用 std::pair
【发布时间】:2013-07-15 09:10:22
【问题描述】:

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

#include <utility>

struct Q {
    static const int X = 0;
};

int main() {
    std::pair<int, int>(Q::X, 0);
    return 0;
}

但是,当我使用默认设置 (cygwin gcc 4.5.3) 使用 g++ 编译它时,它会向我抛出链接器错误:

undefined reference to `Q::X'

我完全被难住了——MSVC 编译得很好,但我的 gcc 没有。 (MinGW 也可以正常工作。)

【问题讨论】:

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


    【解决方案1】:

    链接器找不到Q::X 的定义。

    这可能是因为std::pair&lt;&gt;构造函数将参数作为对const的引用,而Q::X是一个左值,因此它需要Q::X的外部定义才能引用它。

    便携式修复:

    int const Q::X;
    

    【讨论】:

    • 那很不幸;我在一个traits(-like) 类中有十几个这样的static const 定义,所以在外面复制它们会是一个很大的负担。我想我只是将它转换为一个值,这样它就不会尝试引用。感谢您的帮助!
    【解决方案2】:

    你只声明 X,但你也必须定义它,对于静态定义,它必须在类之外发生

    struct Q {
    static const int X = 0;
    };
    int Q::X = 0;
    

    【讨论】:

      【解决方案3】:

      @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;
      

      【讨论】:

        猜你喜欢
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 2021-08-24
        • 2015-03-29
        • 2013-07-03
        相关资源
        最近更新 更多