gpt4 book ai didi

c++ - 此代码是否损坏或 g++ 中是否存在错误?

转载 作者:IT老高 更新时间:2023-10-28 21:47:28 25 4
gpt4 key购买 nike

由于某些奇怪的原因,g++(版本 4.5.0 和 4.5.2)无法编译此代码:

bool somefunc() {
return false;
}

class C {
public:
static const int a = 0;
static const int b = 1;
};

class myclass {
public:
int check() {
return somefunc() ? C::a : C::b;
// if(somefunc()) return C::a; else return C::b;
}
};

int main() {
myclass obj;
obj.check();
return 0;
}

它给了我这个错误:

/tmp/ccyvvTUy.o:/home/mati/test.cpp:14: undefined reference to `C::a'
/tmp/ccyvvTUy.o:/home/mati/test.cpp:14: undefined reference to `C::b'
collect2: ld returned 1 exit status

如果我将有问题的行更改为可以正常编译的注释行,这有什么奇怪的。是我的代码有问题,还是我对 C++ 不了解,还是只是 G++ 中的一个错误?

最佳答案

有一个ongoing debate关于这段代码是否真的合法

无论哪种方式,根据一些读数,实际上确实需要在使用之前定义常量,而不仅仅是声明。也就是说,

class C {
public:
static const int a = 0;
static const int b = 1;
};

const int C::a;
const int C::b;

或者只是使用用于容纳旧编译器的 enum hack(但毕竟这可能是唯一合法的方式):

class C {
public:
enum { a = 0, b = 1 };
};

关于c++ - 此代码是否损坏或 g++ 中是否存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6654609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com