小编mat*_*267的帖子

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

由于一些奇怪的原因,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 ++中的一个错误?

c++ linker-errors

21
推荐指数
2
解决办法
566
查看次数

为什么转换不适用于C++中的自定义运算符?

请考虑以下代码:

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)

c++ compiler-errors operators type-conversion

4
推荐指数
1
解决办法
266
查看次数