Класс с векторами. LNK2005 “public: void __thiscall Vector::setvector(double,double,double)” (?setvector@Vector@@QAEXNNN@Z) уже определен в Source.obj [дубликат]

211
04 ноября 2017, 15:00

На данный вопрос уже ответили:

  • Почему ругается компоновщик? Ошибка: LNK2005 “public: void __thiscall Menus::mainMenu(void)” 1 ответ

Было у меня 2 файла: sourse.cpp, vector.cpp. но нужно сделать из vector.cpp vector.cpp и vector.h. в первом файле - реализация, во втором - прототип. Вот код:

vector.h - https://hastebin.com/detiqajefa.cpp

sourse.cpp - https://hastebin.com/uzatasinob.cpp

vector.cpp - https://hastebin.com/cuyehiwuyi.cpp

Что я делаю не так? судя по ошибке переменная определена дважды. но я не вижу где что странно, дал другу этот код, у него работает...

Answer 1

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

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

Answer 2

В файле source.cpp Вы включили vector.cpp:

#include "vector.cpp"

Замените на:

  #include "vector.h"
READ ALSO
завершилась с кодом 100 (0x64)

завершилась с кодом 100 (0x64)

Код ниже или здесь https://hastebincom/sedohibeta

393