Ошибка компоновщика С++, связанная с функцией перегрузки оператора

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

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

но я продолжаю получать ошибку компоновщика:

Связывание...
main.obj : ошибка LNK2019: ссылка на неразрешенный внешний символ "public: class 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)< br> C:\Users\Aaron McKellar\Documents\School Stuff\CS445\Test\Debug\Test.exe: фатальная ошибка LNK1120: 1 неразрешенный внешний файл

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


person Aaron McKellar    schedule 21.02.2010    source источник
comment
Спасибо за ответы. Я не делал перегрузку оператора в течение некоторого времени. У меня все еще есть проблемы с этим, даже после просмотра моей книги и онлайн. класс Node { public: Node(); инт у; Node& operator=(const Node& n); }; Node::Node() // Конструктор по умолчанию { y = -1; } Node& Node::operator=(const Node& n) { if(this != n) { this.y = n.y; } вернуть *это; } Я не знаю, что не так, но когда я это делаю, intellisense не распознает this как объект Node. Пожалуйста, помогите и спасибо!   -  person Aaron McKellar    schedule 22.02.2010
comment
1> Компиляция... 1> main.cpp 1> c:\users\aaron mckellar\documents\school stuff\cs445\test\test\main.cpp(49): ошибка C2679: двоичный файл '!=': нет оператора найдено, которое принимает правый операнд типа 'const Node' (или нет приемлемого преобразования) 1> может быть 'встроенный оператор C++!=(Node *, Node *)' 1> c:\program files\ microsoft sdks\windows\v6.0a\include\guiddef.h(197): или 'int operator !=(const GUID &,const GUID &)' 1› при попытке сопоставить список аргументов '(Node *const , const Узел)'   -  person Aaron McKellar    schedule 22.02.2010
comment
1›c:\users\aaron mckellar\documents\school stuff\cs445\test\test\main.cpp(51): ошибка C2228: слева от '.y' должен быть class/struct/union 1› тип 'Node *const ' 1› вы намеревались использовать '-›' вместо этого?   -  person Aaron McKellar    schedule 22.02.2010
comment
Я также пытался вернуть this = n; но я получил это: 1›c:\users\aaron mckellar\documents\school stuff\cs445\test\test\main.cpp(56): ошибка C2440: '=': невозможно преобразовать из 'const Node' в 'Node *const ' 1> Нет доступного пользовательского оператора преобразования, который может выполнить это преобразование, или оператор не может быть вызван   -  person Aaron McKellar    schedule 22.02.2010


Ответы (2)


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

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

person sepp2k    schedule 21.02.2010
comment
пожалуйста, просмотрите мои комментарии выше - person Aaron McKellar; 22.02.2010

Конечно, вам нужно указать определение для operator=:

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

     // 'copy' semantics for Node
}

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

person Alexander Gessler    schedule 21.02.2010
comment
пожалуйста, просмотрите мои комментарии выше - person Aaron McKellar; 22.02.2010