2010-02-21 2 views
1

J'ai une liste de type nœud. Je veux mettre un nœud temporaire égal au nœud à l'avant de la liste, comme suit:Erreur de lieur C++ impliquant une fonction de surcharge de l'opérateur

class Node 
{ 
    public: 
     Node(); 
     Node& operator = (const Node& n); 
}; 

mais je continue à obtenir une erreur Linker:

Linking...
main.obj : error LNK2019: unresolved external symbol "public: class Node & __thiscall Node::operator=(class Node const &)" ([email protected]@[email protected]@@Z) referenced in function "void __cdecl fillScan(int,class std::list >)" ([email protected]@[email protected]@@[email protected]@@@[email protected]@@[email protected]@@Z)
C:\Users\Aaron McKellar\Documents\School Stuff\CS445\Test\Debug\Test.exe : fatal error LNK1120: 1 unresolved externals

Merci à l'avance!

+0

Merci pour les réponses. Je n'ai pas fait de surcharge de l'opérateur depuis un certain temps. J'ai toujours des problèmes avec cela même après avoir parcouru mon livre et en ligne. classe Noeud { public: Noeud(); int y; Noeud opérateur & = (Noeud const & n); }; :: node node() // constructeur par défaut { y = -1;} opérateur :: node et noeud = (const Node & n) { if (! ce n =) { this.y = ny;} retour * ce, } Je ne sais pas ce qui est mal, mais quand je fais this.y IntelliSense ne reconnaît pas comme étant un objet Node S'il vous plaît aider et merci! –

+0

1> Compilation ... 1> main.cpp 1> c: \ us ers \ aaron mckellar \ documents \ trucs scolaires \ cs445 \ test \ test \ main.cpp (49): erreur C2679: binaire '! =': aucun opérateur trouvé qui prend un opérande droit de type 'const noeud' (ou il n'y a pas de conversion acceptable) 1> pourrait être 'opérateur C++ intégré! = (Noeud *, Noeud *)' 1> c: \ programmes \ microsoft sdks \ windows \ v6.0a \ include \ guiddef.h (197): ou 'opérateur int! = (Const GUID &, const GUID &)' 1> en essayant de faire correspondre la liste d'arguments '(Node * const, const Node)' –

+0

1> c: \ users \ aaron mckellar \ documents \ trucs scolaires \ cs445 \ test \ test \ main.cpp (51): erreur C2228: gauche de '.y' doit avoir class/struct/union 1> type est 'Node * const' 1> avez-vous l'intention d'utiliser '->' à la place? –

Répondre

2

Vous avez seulement montré la déclaration de operator=, pas la définition. Soit vous n'avez pas fourni de définition, soit l'éditeur de liens ne peut pas le trouver.

Eh bien, je devrais dire: L'éditeur de liens ne peut absolument pas trouver la définition de operator=. Soit parce que vous avez oublié d'en fournir un, soit parce que votre projet/Makefile est mal configuré.

+0

s'il vous plaît voir mes commentaires ci-dessus –

0

Vous devez fournir une définition pour operator=, bien sûr:

Node& Node::operator=(const Node& n) { 

    // 'copy' semantics for Node 
} 

Notez que le compilateur génère le par lui-même en utilisant l'opérateur d'affectation si aucune copie membre à membre est fourni. Utilisez l'opérateur généré par le compilateur si suffisant.

+0

s'il vous plaît voir mes commentaires ci-dessus –