【发布时间】:2014-09-29 09:24:56
【问题描述】:
以下代码在我的 class.cpp 中给出了 gcc 4.7 的错误:
auto TLV1 = std::make_pair(UNSIGNEDCHAR_STATIC_CONST, Value1);
auto TLV2 = std::make_pair(UNSIGNEDCHAR_STATIC_CONST, Value2);
UNSIGNEDCHAR_STATIC_CONST 是在类中定义的static const unsigned char,值是在函数中定义的vector<unsigned char>
编辑:在我的 class.h 中:
static const unsigned char UNSIGNEDCHAR_STATIC_CONST = 0x4F;
链接器错误:
undefined reference to `foo::UNSIGNEDCHAR_STATIC_CONST'
undefined reference to `foo::UNSIGNEDCHAR_STATIC_CONST'
以下代码不会重现错误:
unsigned char t = UNSIGNEDCHAR_STATIC_CONST;
auto TLV1 = std::make_pair(t, Value1);
auto TLV2 = std::make_pair(t, Value2);
编辑: 多亏了 Neil Krik 通过选角,我使它工作正常:
auto TLV1 = std::make_pair(static_cast(UNSIGNEDCHAR_STATIC_CONST), Value1);
或 Vlad 解决方案,在 cpp 文件中:
const unsigned char foo::UNSIGNEDCHAR_STATIC_CONST= 0x4F
【问题讨论】:
-
我不知道,这就是我问的原因......
-
C++ 中存在一个问题,您在类定义中有一个静态 const,并尝试将它与一个需要引用的函数一起使用。这可能会在 C++11 中以某种方式解决,可能使用
constexpr,我不知道。试试std::make_pair((unsigned char)(UNSIGNEDCHAR_STATIC_CONST), Value1); -
UNSIGNEDCHAR_STATIC_CONST声明的完整代码行是什么? -
演员正在工作。 @Niall 我已经用这行编辑了 ...
-
因为 make_pair 可能需要引用,但是除非您在类之外(可能在源文件中)为静态 const 提供定义,否则它也没有分配内存来获取引用。强制转换只是将值复制到临时局部变量中并传递它。这只是 C++ 的一个怪癖。