Ошибка компоновщика C ++ при использовании функции перегрузки оператора - PullRequest
1 голос
/ 22 февраля 2010

У меня есть список типа узла. Я хочу установить временный узел, равный узлу в начале списка, следующим образом:

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

но я получаю сообщение об ошибке компоновщика:

Связь ...
main.obj: ошибка LNK2019: неразрешенный внешний символ "public: класс Node & __thiscall Node :: operator = (class Node const &)" (?? 4Node @@ QAEAAV0 @ ABV0 @@ Z), указанный в функции "void __cdecl fillScan ( int, class std :: list>) "(? fillScan @@ YAXHV? $ list @ VNode @@ V? $ allocator @ VNode @@@ std @@@ std @@@ Z) * ​​1008 * C: \ Users \ Aaron McKellar \ Documents \ School Stuff \ CS445 \ Test \ Debug \ Test.exe: фатальная ошибка LNK1120: 1 неразрешенная внешняя часть

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 22 февраля 2010

Вы показали только объявление operator=, а не определение. Либо вы не указали определение, либо компоновщик не может его найти.

Ну, я должен сказать: компоновщик определенно не может найти определение для operator=. Либо это потому, что вы забыли указать один, либо потому, что ваш проект / Makefile настроен неправильно.

0 голосов
/ 22 февраля 2010

Вам необходимо предоставить определение для operator=, конечно:

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

     // 'copy' semantics for Node
}

Обратите внимание, что компилятор сам генерирует оператор присваивания, используя элементное копирование, если ничего не указано. При необходимости используйте оператор, сгенерированный компилятором.

...