Visual Studio 2015 “non-standard de la syntaxe; utiliser "& " pour créer un pointeur de membre”
Je tente ma propre Liste Liée de mise en œuvre en C++ et pas pour la vie de me comprendre pourquoi je vais avoir cette erreur. Je sais qu'il est un STL mise en œuvre, mais pour des raisons que j'essaie de mon propre. Voici le code:
#include <iostream>
template <class T>
class ListElement {
public:
ListElement(const T &value) : next(NULL), data(value) {}
~ListElement() {}
ListElement *getNext() { return next; }
const T& value() const { return value; }
void setNext(ListElement *elem) { next = elem; }
void setValue(const T& value) { data = value; }
private:
ListElement* next;
T data;
};
int main()
{
ListElement<int> *node = new ListElement<int>(5);
node->setValue(6);
std::cout << node->value(); //ERROR
return 0;
}
Sur la ligne spécifiée, j'obtiens l'erreur "non-standard de la syntaxe; utiliser" & "pour créer un pointeur de membre". Ce que l'enfer est-ce à dire?
OriginalL'auteur Lawrence Aiello | 2015-08-18
Vous devez vous connecter pour publier un commentaire.
Vous essayez de retour de la fonction de membre de
value
, pas la variable membredata
. Changementà
Bonne chance. 🙂
OriginalL'auteur songyuanyao
Ici, le problème est la confusion de la combinaison de modèles, de multiples significations d'un opérateur, et une faute de frappe.
Vous avez une méthode retournant un
const T&
, oùT
est un paramètre du modèle. Vous avez l'intention que de retourner une référence constante à un objet de typeT
. Mais en raison d'une faute de frappe, le compilateur pense que vous essayez de faire correspondre qu'à une méthode (value
), plutôt que d'un objet de typeT
(data
). Le compilateur pense que vous essayez d'utiliser&
que le pointeur de membre de l'opérateur, de ne pas la référence à l'objet de l'opérateur. Mais il est assez intelligent que quelque chose n'est pas tout à fait le droit, et donc donne un avertissement.OriginalL'auteur Raedwald