erreur C2679: binary '=' : l'opérateur n'a pas trouvé ce qui prend de la main droite opérande de type 'std::vector<_Ty> *' (ou il n'est pas acceptable de conversion)
J'ai suivantes lors de la construction d'un graphique.
#include <vector>
using namespace std;
template<class T>
class Node
{
private:
T data;
Node<T> *link;
vector<T> neighbors;
public:
Node(){neighbors = new vector<T>();};
};
int main()
{
Node<int> n;
return 0;
}
... qui renvoie l'erreur C2679: binary '=': l'opérateur n'a pas trouvé...
Je suis en utilisant VS2010. Quel est le problème?
Merci!
Vous devez vous connecter pour publier un commentaire.
La
new
opérateur renvoie un pointeur type, mais votre variable membreneighbors
n'est pas un pointeur. Donc, vous êtes à l'affectation d'un pointeur (le résultat denew
) à un non-type de pointeur. Votreneighbors
variable doit être un pointeur:vector<T>* neighbors
.Mais je pense que vous êtes probablement à l'incompréhension de l'utilisation de
new
ici. Vous ne devriez probablement pas à même d'utiliser un vecteur de pointeur à tous. Il suffit de retirer la ligneneighbors = new vector<T>()
. Le vecteur de l'objet sera automatiquement initialisé et prêt à l'emploi.En C++, le
new
mot-clé alloue et initialise les objets sur le tas, qui doit ensuite être libéré plus tard à l'aide dedelete
. Il est préférable d'éviter l'new
mot-clé, simplement en l'initialisation de l'objet, comme une variable automatique, comme:vector<T> neighbors;
De cette façon, vous n'avez pas à vous soucier de la gestion de la mémoire, et le vecteur de l'objet sera automatiquement détruite quand elle est hors de portée.
voisins n'est pas un pointeur.
Le point de l'ensemble de l'utilisation de vecteurs n'est pas la gestion de la mémoire explicite.
En fait, dans votre constructeur de nœud, les voisins, la valeur par défaut est initialisée, donc il suffit de ne pas initialiser. Votre constructeur peut ressembler à ceci:
De sorte que vous pouvez l'omettre 🙂