Помогите, что я упускаю?
Хочу поместить класс в отдельный файл, а потом его присоединять к проекту. Но выскакивают ошибки:
Ошибка 1 error LNK2005: "public: __thiscall myclass::myclass(void)" (??0myclass@@QAE@XZ) уже определен в dd.obj
Ошибка 2 error LNK2005: "private: void __thiscall myclass::func(void)" (?func@myclass@@AAEXXZ) уже определен в dd.obj
Ошибка 3 fatal error LNK1169: обнаружен многократно определенный символ - один или более
А когда класс в файле с функцией main, то всё нормально.
Вот, что получается меня
main.cpp:
#include <iostream>
#include "class.cpp"
using namespace std;
int main()
{
myclass a;
cout << a.i;
return 0;
}
class.cpp:
#include <iostream>
using namespace std;
class myclass {
public:
myclass();
int i;
};
myclass::myclass() {i = 3;}
Здравствуйте, Zender, Вы писали:
Z>Помогите, что я упускаю?
Z>Хочу поместить класс в отдельный файл, а потом его присоединять к проекту. Но выскакивают ошибки:
Z>...
Правильнее будет вынести описание класса в отдельный .h (или .hpp) файл и подключать в нужных местах уже его. За исключением тех случаев, когда ваши классы шаблонные.
В самом файле с описанием класса сделать что-то вроде:
#ifndef SOME_UNIQUE_ID
#define SOME_UNIQUE_ID
// Описание класса
// ...
#endif
Для многих компиляторов вместо этого достаточно в начале файла написать #pragma once
Здравствуйте, Zender, Вы писали:
Z>Помогите, что я упускаю?
Z>Хочу поместить класс в отдельный файл, а потом его присоединять к проекту. Но выскакивают ошибки:
Z>Z>Ошибка 1 error LNK2005: "public: __thiscall myclass::myclass(void)" (??0myclass@@QAE@XZ) уже определен в dd.obj
Z>Ошибка 2 error LNK2005: "private: void __thiscall myclass::func(void)" (?func@myclass@@AAEXXZ) уже определен в dd.obj
Z>Ошибка 3 fatal error LNK1169: обнаружен многократно определенный символ - один или более
Z>
Z>#include "class.cpp"
У тебя определение тела функции появилось в нескольких obj-файлах (т.к. определено в class.cpp и везде куда включен class.cpp) и как линкер должен догадаться с чем линковать? Прочитай сообщение об ошибке более внимательно. В понимании текста ошибки так же поможет знание того чем отличается объявление от определения.