0

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

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:我应该补充说我在收到反馈后报告了这件事

4

1 回答 1

2
 const testGetter*&

这表示对指向 const 的非常量指针的引用testGetter。您不能从 a 转换testGetter*为该类型,因为这会破坏以下示例中的 const 正确性:

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

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

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

const testGetter* getPtr() const

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

const testGetter *const& getPtr() const

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

如果 getter 是由工具 (Eclipse) 自动生成的,则该工具存在错误或过于简单而无法生成正确的代码。您将需要手动创建 getter 或修复生成器的输出。


Sidenote: Given a choice of Eclipse CDT or g++, I'd bet that the bug is in eclipse more often than not.

于 2012-10-31T12:27:56.213 回答