Referencia de objeto C++ en lugar de copia
Frecuentes
Visto 82 veces
0
Esto funciona bien:
udtCandidate firstCand;
firstCand=uSeqs[i].Candidates.front();
Esto crearía una copia de udtCandidate.
Pero necesitaría una referencia, no una copia.
Sin embargo
udtCandidate firstCand;
firstCand=&uSeqs[i].Candidates.front();
No funciona. El compilador me dice que no hay ningún operador binario "=" que acepte un operando diestro del tipo "udtCandidate *".
¿Alguien sabe lo que hice mal?
Las declaraciones son:
struct udtCandidate
{
udtJoinFeatures JoinFeaturesLeft;
udtJoinFeatures JoinFeaturesRight;
udtByteFeatures ByteFeaturesLeft;
udtByteFeatures ByteFeaturesRight;
int iHPUnitIDLeft;
int iHPUnitIDRight;
double targetCost;
vector<unsigned long>bestPath;
double bestPathScore;
bool hasAncestor;
};
struct udtCandidateSequence
{
double Score;
vector<udtCandidate>Candidates;
};
1 Respuestas
1
Para almacenar una referencia en lugar de un valor, debe crear una variable de referencia:
udtCandidate& firstCand = uSeqs[i].Candidates.front();
Usar &
como hiciste significa operador de dirección, que a su vez cambia el tipo a un puntero.
Respondido el 21 de Septiembre de 13 a las 12:09
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c++ windows object reference or haz tu propia pregunta.
Ah, okey. Parece que tengo que declararlo y asignarlo en una línea. Intenté declarar udtCandidate& firstCand; en una línea, y asignándolo en la siguiente línea, pero eso no funcionó... - poderoso
Eso es porque no puedes tener una referencia vacía. Le sugiero que lea sobre el tema en su libro de C++. Además, la inicialización en una línea es una buena práctica de programación. - Bartek Banachewicz