g ++认为我没有传递引用

时间:2010-05-18 19:05:40

标签: c++ g++ pass-by-reference

当我调用一个引用的方法时,g ++抱怨我没有传递引用。我认为呼叫者不必为PBR做任何不同的事情。这是有问题的代码:

//method definition
void addVertexInfo(VertexInfo &vi){vertexInstances.push_back(vi);} 

//method call:
sharedVertices[index]->addVertexInfo(VertexInfo(n1index, n2index));

这是错误:

GLUtils/GLMesh.cpp: In member function 'void GLMesh::addPoly(GLIndexedPoly&)': GLUtils/GLMesh.cpp:110: error: no matching function for call to 'SharedVertexInfo::addVertexInfo(VertexInfo)' GLUtils/GLMesh.h:93: note: candidates are: void SharedVertexInfo::addVertexInfo(VertexInfo&)

3 个答案:

答案 0 :(得分:12)

VertexInfo(n1index, n2index)创建一个临时VertexInfo对象。临时不能绑定到非const引用。

修改addVertexInfo()函数以获取const引用可以解决此问题:

void addVertexInfo(const VertexInfo& vi) { /* ... */ }

通常,如果一个函数没有修改它引用的参数,它应该采用一个const引用。

答案 1 :(得分:3)

您不能将临时对象作为非const引用传递。如果您无法更改addVertexInfo的签名,则需要在堆栈上创建信息:

VertexInfo vi(n1index, n2index);
sharedVertices[index]->addVertexInfo(vi);

答案 2 :(得分:1)

VertexInfo &vi更改为VertexInfo const& vi