【发布时间】:2011-12-19 23:31:48
【问题描述】:
// SomeCls.h
class SomeCls
{
static const int PERIOD_ALARM_NORMAL = 5;
static const int PERIOD_ALARM_THRESH = 1;
void method()
{
bool b = true;
const int d = b ? PERIOD_ALARM_THRESH : PERIOD_ALARM_NORMAL;
}
} obj;
它会构建好的。现在取出 method() 实现并将其放入 cpp 文件中:
//SomeCls.cpp
#include "SomeCls.h"
void SomeCls::method()
{
bool b = true;
const int d = b ? PERIOD_ALARM_THRESH : PERIOD_ALARM_NORMAL;
}
为什么先生。链接器说
对
SomeCls::PERIOD_ALARM_NORMAL' undefined reference toSomeCls::PERIOD_ALARM_THRESH'的未定义引用
?
谢谢
编辑: 在我看来,在 .h 内部,三元运算符将静态 const 整数作为右值,但是......在 decalrative .h 之外,它将它们视为左值并需要定义。 这是我从下面的答案中设法理解的。感谢 Bada 编译器(一些 eabi linux 的东西)
【问题讨论】:
-
为什么当你做what时链接器会这样说?您要准确链接什么?
-
@Scarlet:我认为你在这里误解了一些东西。 OP不想测试
d == b,他想分配d,测试b。 -
请不要对变量名使用全大写。它们传统上仅用于预处理器宏(除了阅读起来很累)。
-
@Xeo 我是盲人 :) 删除评论以免造成误解,谢谢。
-
FWIW,此代码在 Clang 3.1 上运行良好,但在 GCC 4.4.5 上运行良好。你用的是哪个编译器?
标签: c++ compilation linker undefined