2010-05-18 4 views
3

Lorsque j'appelle une méthode qui prend une référence, g ++ se plaint que je ne transmets pas de référence. Je pensais que l'appelant n'avait pas à faire quelque chose de différent pour PBR. Voici le code incriminé:g ++ ne pense pas que je passe une référence

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

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

Et voici l'erreur:

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&)

Répondre

12

VertexInfo(n1index, n2index) crée un objet VertexInfo temporaire. Un temporaire ne peut pas être lié à une référence non-const.

Modifier votre fonction addVertexInfo() prendre une référence CONST résoudre ce problème:

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

En général, si une fonction ne modifie pas un argument qu'il faut par référence, il devrait prendre une référence const.

+0

Certains documents, de toutes sortes: http://msdn.microsoft.com/en-us/library/cfbk5ddc % 28VS.80% 29.aspx – luke

1

changement VertexInfo &vi à VertexInfo const& vi

3

Vous pouvez passer de un objet temporaire comme une référence non const. Si vous ne pouvez pas changer la signature de addVertexInfo, vous devez créer vos informations sur la pile:

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