g ++编译抱怨:
error: no matching function for call to ‘AddressSpace::resolve(ClassOne&, ClassTwo*&, ClassThree&) const’
note: candidates are: bool AddressSpace::resolve(ClassOne&, ClassTwo*, ClassThreer) <near match>
导致此错误的代码是
void Class::handler(ClassOne& objOne, ClassTwo& objTwo,
ClassThreer objThree) {
obj.getAddressSpaceObj().resolve(objOne, objTwo.pointer, objThree);
}
我深入研究代码,发现此错误是由getOtherObj()
返回的引用类型引起的。我让它在类定义中返回对AddressSpace对象的const引用,参见
const AddressSpace &getAddressSpaceObj(){
return addressSpace;
}
我更改此定义后返回正常引用,
AddressSpace &getAddressSpaceObj(){
return addressSpace;
}
编译器不再抱怨它了。我想知道为什么这个错误被声明为参数不匹配错误?为什么编译器没有将内容复制为函数调用的参数,而是将它们作为引用传递?
答案 0 :(得分:5)
如果resolve
没有const
说明符,则您无法在const
引用上调用它,因此这与将其更改为非{{1}一致并让它现在工作。这是一个非常简单的例子:
const
为了完整起见,如果您取消注释#include <iostream>
class A
{
public:
void someFuncA() {};
void someFuncB() const {} ;
} ;
int main()
{
A
a1 ;
const A &aRef = a1 ;
a1.someFuncA() ;
// Below won't work because aRef is a const & but someFuncA() not const
//aRef.someFuncA() ;
// Below will work since someFuncB() is const
aRef.someFuncB() ;
}
,那么您将收到的错误将与此类似:
aRef.someFuncA()