c ++ - 错误:'const testGetter *&'类型引用的初始化无效来自'testGetter * const'类型的表达式

时间:2012-10-31 11:47:04

标签: c++ eclipse g++ mingw

我知道它已经出现了数十亿次,但这次它是自动生成的代码:

class testGetter{
    testGetter * ptr; // wrote this
public:
// this is autogenerated by eclipse
    const testGetter*& getPtr() const {
        return ptr;
    }

    void setPtr(const testGetter*& ptr) {
        this->ptr = ptr;
    }
};

我在Windows 7 mingw - g ++版本 4.7.0

这是eclipse(juno)模板中的一个错误吗?

编辑:编译器调用:

g++ -O0 -g3 -Wall -c -fmessage-length=0 -fpermissive -o Visitor.o "..\\Visitor.cpp"

编辑2013.06.12 :我应该在收到反馈后添加I reported the thing

1 个答案:

答案 0 :(得分:1)

 const testGetter*&

表示对const testGetter的非const指针的引用。您无法将testGetter*转换为该类型,因为在以下示例中会破坏const-correctness:

const testGetter tmp;
testGetter t;
t.getPtr() = &tmp;     // !!!

如果允许转换,上面的代码将编译,并在标有!!!的行之后存储在t(类型为testGetter*)内的指针将指向const testGetter,从而破坏代码中的const正确性。

您可能只想返回一个指针,而不是对指针的引用:

const testGetter* getPtr() const

或者添加额外的const以保证const正确性:

const testGetter *const& getPtr() const

在任何一种情况下,代码都会确保您不会将内部testGetter*设置为指向const testGetter

如果getter是由工具(Eclipse)自动生成的,那么该工具有一个bug或者有点过于简单而无法生成正确的代码。您需要手动创建getter或者修复生成器的输出。


旁注:考虑到Eclipse CDT或g ++的选择,我敢打赌这个错误经常发生在日食中。