invalide de l'initialisation de la non-const de référence de type ‘int& "à partir d'un temporaire de type" Maclasse<int>::iterator*'
J'obtiens l'erreur suivante à partir de g++, tout en essayant d'ajouter un itérateur de soutien pour ma liste liée de classe.
LinkedList.hpp: En fonction de membre de Type& exscape::LinkedList<Type>::iterator::operator*() [Type = int]’: les tests.rpc:51: instancié à partir d'ici LinkedList.hpp:412: erreur: invalid initialisation de la non-const de référence de type ‘int& "à partir d'un temporaire de type" exscape::LinkedList<int>::iterator*’
Vraisemblablement pertinents extraits de code:
LinkedList.hpp:
template <typename Type>
class LinkedList {
private:
struct node {
struct node *prev;
struct node *next;
Type data;
};
public:
class iterator : public std::iterator<...> {
node *p;
public:
Type &operator*();
};
...
};
template <typename Type>
LinkedList<Type>::iterator::iterator(struct node *in_node) : p(in_node) {}
template <typename Type>
inline Type &LinkedList<Type>::iterator::operator*() {
return this-p->data; /////Line 412
}
tests.cpp:
...
LinkedList<int> l1;
...
LinkedList<int>::iterator it;
for (it = l1.begin(); it != l1.end(); ++it) {
std::cout << "Element: " << *it << std::endl; /////Line 51
}
J'ai googlé (et cherché SI, bien sûr), et vérifié mon code en vain - soit je suis absent quelque chose de base (aka. faire quelque chose de stupide), ou je suis pas les connaissances requises. Des conseils?
- On dirait que vous pourriez avoir une faute de frappe sur la ligne 412
Vous devez vous connecter pour publier un commentaire.
vous êtes de retour d'une référence sur un objet temporaire :
this - p->data
(j'ai insisté sur la faute de frappe) calcule un pointeur intervalle, et le résultat de l'opération est temporaire rvalue: vous ne pouvez pas prendre une référence à partir d'elle.Il suffit de retirer la faute de frappe:
Le problème peut être illustré par l'extrait suivant
Remplacer la ligne 412 par la suite