2010-03-21 1 views
4

J'essaie de renvoyer une nouvelle copie des données dans une classe de modèle C++. Le code suivant obtient cette erreur: invalid conversion from 'int' to 'int*'. Si je supprime le new T alors je ne retourne pas une copie des données mais un pointeur vers lui.Comment renvoyer une copie des données en C++

template<class T> 
T OrderedList<T>::get(int k) 
{ 
    Node<T>* n = list; 
    for(int i = 0; i < k; i++) 
    { 
     n=n->get_link(); 
    } 
    return new T(n->get_data()); // This line is getting the error ********** 
} 

Répondre

11

new crée et renvoie un pointeur. Vous voulez juste une copie qui sera créé implicitement, puisque la déclaration de retour invoquera le constructeur de copie (ou équivalent pour POD) de l'objet T:

return n->get_data(); 
+0

Ou, selon la définition de 'noeud <> 'et' T', 'retourne T (n-> get_data())'. (Bien que je suis d'accord qu'il est peu probable donné ce code.) – sbi

+0

@sbi: puisque la fonction renvoie un 'T', je ne peux pas imaginer quel genre de 'Node <>' et 'T' compiler et ne parviennent pas à copier le 'T' ' –

Questions connexes