静态常量上的c++链接错误

c++ linking error on static const

本文关键字:链接 错误 c++ 常量 静态      更新时间:2023-10-16

我使用的是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;
}

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

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;