由于一些奇怪的原因,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;
}
Run Code Online (Sandbox Code Playgroud)
它给了我这个错误:
/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
Run Code Online (Sandbox Code Playgroud)
如果我将有问题的行更改为注释行,它编译得很好,这很奇怪.我的代码是否有问题以及我对C++不了解的东西或它只是G ++中的一个错误?
请考虑以下代码:
class C {
public:
int operator-(int x) {
return 3-x;
}
};
class wrapper {
public:
operator C() {
static C z;
return z;
}
} wrap;
int main() {
return wrap-3;
}
Run Code Online (Sandbox Code Playgroud)
它在g ++上给出了这个错误:
test.cpp: In function ‘int main()’:
test.cpp:17:17: error: no match for ‘operator-’ in ‘wrap - 3’
Run Code Online (Sandbox Code Playgroud)
转换运算符似乎正在工作,因为此版本有效:
class wrapper {
public:
operator int() {
static int z=3;
return z--;
}
} wrap;
int main() {
return wrap-3;
}
Run Code Online (Sandbox Code Playgroud)
operator- 似乎也在工作,因为这段代码编译:
class C {
public:
int …Run Code Online (Sandbox Code Playgroud)