Microsoft перегружает << Образец оператора выбрасывает ошибки ссылки - PullRequest
0 голосов
/ 29 января 2012

Я пытаюсь скомпилировать образец Microsoft " с перегрузкой << оператора для ваших собственных классов </a>", но получаю следующую ошибку ссылки:

ошибка LNK1169: найден один или несколько кратно определенных символов

ошибка LNK2005: «оператор класса std :: basic_ostream> & __cdecl << (класс std :: basic_ostream> &, класс Date const &)» (?? 6 @ YAAAV? $ Basic_ostream @ DU? $ Char_traits @ D @ std @@@ std @@ AAV01 @ ABVDate @@@ Z) уже определен в Date.obj

Кто-нибудь знает, почему это не компилируется?

Ответы [ 2 ]

3 голосов
/ 29 января 2012

Если у вас есть определение оператора в файле заголовка, вы должны объявить его inline, иначе оно будет определено во всех единицах перевода, которые включают этот заголовок.

Но, вероятно, лучше переместить его в файл реализации, если только у вас нет веских причин для его включения в заголовок.

0 голосов
/ 22 июля 2015

Для меня эта ошибка была связана с несколькими определениями, и я решил ее по рекомендации Microsoft.В свойствах проекта => Linker => Командная строка => Текстовое поле Дополнительные параметры добавьте команду "/ FORCE: MULTIPLE".Это решило мою проблему.(https://msdn.microsoft.com/en-us/library/70abkas3.aspx)

...