отслеживание LNK2005: «уже определено» - PullRequest
1 голос
/ 31 января 2012

Я работал над программой в Windows VC ++ 2008. Я начал с того, что весь мой код находился в файлах .cpp (только для того, чтобы все работало), и теперь разбил все на файлы .h и .cpp.когда я компилирую, я получаю кучу ошибок LNK2005, утверждая, что:

Object.obj : error LNK2005: "__thiscall thing::thing(args)" already defined in otherObject.obj

, пока я создавал оригинальную программу, я продолжал получать ошибки необъявленного идентификатора, и поэтому я дал директиву include, чтобы удовлетворить это.теперь, когда я разбиваю все на отдельные файлы .cpp и .h, я получаю все это.в каком месте я начинаю искать (объект, другой объект или вещь) или где-то еще.

Ответы [ 2 ]

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

По сути, у вас есть определение для thing::thing(args) в двух единицах перевода (TU), что нарушает правило единого определения (ODR) и, следовательно, ошибку.
Компоновщик точно сообщает вам, какие TU задействованы: otherObject.obj и Object.obj.

Начните просматривать otherObject.cpp и Object.cpp и заголовки, которые включены в эти два cpp файла. Скорее всего, вы определили свой конструктор thing::thing(args) в заголовочном файле, и включение этого заголовочного файла в оба этих cpp файла приведет к нескольким определениям.

Предлагаемое решение:

Вы не можете определить конструктор в заголовочном файле. Вам необходимо добавить его в ваш файл cpp вместе с другими функциями-членами класса. Если вам нужно добавить определение конструктора в заголовок, вы должны пометить его inline, учитывая, что вы не показали свой код, я не вижу причин применять второй подход.

0 голосов
/ 31 января 2012

Учитывая информацию в вашем вопросе, держу пари, что метод определен в заголовочном файле, но не помечен как встроенный.Это тогда вызывает дублирующие ошибки компоновщика символов.Попробуйте пометить встроенный метод или переместить определение в исходный файл (.C).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...