我知道它已经出现了数十亿次,但这次它是自动生成的代码:
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
答案 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 ++的选择,我敢打赌这个错误经常发生在日食中。