Referencia de objeto C++ en lugar de copia

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;
};

preguntado el 21 de septiembre de 13 a las 12:09

1 Respuestas

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

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

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.