当我调用一个引用的方法时,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&)
答案 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