2014-11-05 4 views
-3

У меня есть два .cpp файл и один .h файл:LNK2005 - уже определенный объект

#include <iostream> 
#include <string> 
#include <vector> 

namespace characters 
{ 
    using namespace std; 
    class character{ 
    public: 
     void info_character(); 
    //... 
    }; 
} 

Я добавить этот файл заголовка в моих .cpp файлах. Поэтому, когда я хочу использовать:

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    character test(); 
    test.info_character(); 
} 

Это вызывает ошибку:

Error 1 error LNK2005: "public: void __thiscall characters::character::info_character(void)" ([email protected]@[email protected]@QAEXXZ) already defined in Mechanics.obj

Как это исправить (я хотел бы добавить файл заголовка для всех моих файлов .cpp)?

+1

Является ли заголовок, указанный выше полным (кажется, не хватает, по крайней мере, включить охранников)? Сообщение об ошибке выглядит так, как будто символы 'character :: character :: info_character()' определены в заголовке. ... или вы случайно включаете файл .cpp. Другая возможность заключается в том, что зависимости для Mechanics.obj не были правильно отслежены, и это осталось от более ранней версии (попробуйте очистить проект и перестроить). –

+0

Вы уверены, что вы не включаете заголовок дважды из чего-либо? Он, похоже, не включает в себя охранников, и действительно должен. – ssube

+1

Вы не можете получить эту ошибку из кода, который вы опубликовали. Это ошибка компоновщика, и поскольку ваш код не может скомпилироваться из-за [раздражающего разбора] (http://en.wikipedia.org/wiki/Most_vexing_parse), он не может достичь стадии связывания. – Angew

ответ

1

Вы должны убедиться, что включенный файл не содержит реализацию character::info_character, за исключением случаев, когда вы используете встроенную реализацию (что у вашей выдержки нет).

Переместить этот код

void character::info_character() 
{ 
    ... 
} 

к одному из файлов .cpp.

Смежные вопросы