c ++在静态const上链接错误

时间:2015-03-18 17:20:52

标签: c++

我正在使用gcc(Debian 4.4.5-8)4.4.5。使用以下代码,我收到链接错误:

  

/tmp/ccOeGgC9.o:在功能A::func()':
(.text+0x1b): undefined reference to
B :: CONST_B'
  (.text + 0x23):未定义对`A :: CONST_A'

的引用

头:

class A {
    public:
    static const int CONST_A = 10;
    int func();
};
class B {
    public:
        static const int CONST_B = 20;
};

cpp文件(带链接错误):

int A::func() {
    bool c = true;
    const int a = (c == true) ? B::CONST_B : CONST_A;
}

int main() {
    return 0;
}

要修复错误,我必须编写cpp文件:

cpp文件(工作):

int A::func() {
    bool c = true;
    int a = CONST_A;
    a = (c == true) ? B::CONST_B : a;
}

int main() {
    return 0;
}

你能解释为什么我不能编译第一个代码吗?

1 个答案:

答案 0 :(得分:0)

class A {
    public:
    static const int CONST_A = 10;
    int func();
};

此示例中的CONST_A等静态成员必须在类

之外定义它们 像这样

class A {
   public:
   static const int CONST_A = 10;
   int func();
};

const int A::CONST_A = 10;