
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Сообщ.
#1
,
|
|
|
В Visual C++ 6 необходимо разбить программу на ООП на файлы, так, чтобы один файл (*.h) содержал сам класс, аналогичный *.cpp файл содержал функции этого класса.
Когда всё в одном файле, то всё работает, при разбиении на файлы (для начала я выношу один класс, остальный пока не трогаю), то возникают ошибки: ![]() ![]() Kursach.obj : error LNK2005: "public: __thiscall Chelovek::Chelovek(char *,char *,char *)" (??0Chelovek@@QAE@PAD00@Z) already defined in Chelovek.obj Kursach.obj : error LNK2005: "public: __thiscall Chelovek::Chelovek(char *)" (??0Chelovek@@QAE@PAD@Z) already defined in Chelovek.obj Kursach.obj : error LNK2005: "public: __thiscall Chelovek::Chelovek(void)" (??0Chelovek@@QAE@XZ) already defined in Chelovek.obj При это, есть файл Chelovek.h с таким содержанием: ![]() ![]() #ifndef CHELOVEK_H #define CHELOVEK_H #include <fstream.h> class Chelovek { protected: char Name[15]; char Family[15]; char Otchestvo[15]; public: int ID; Chelovek(char *Nm,char *Fm,char *Ot); Chelovek(char *Fm); Chelovek(); ~Chelovek(){}; virtual void print()= 0;// Чистая виртуальная функция virtual int fwrite()= 0; virtual int Fwrite(fstream f)= 0;// Чистая виртуальная функция virtual int fread()=0;// Чистая виртуальная функция virtual int Fread(ifstream f)= 0; }; #endif А файл Chelovek.cpp имеет такое содержание: ![]() ![]() #include "Chelovek.h" #include <string.h> Chelovek::Chelovek(char *Nm,char *Fm,char *Ot) { ID=0; strcpy(Name,Nm); strcpy(Family,Fm); strcpy(Otchestvo,Ot); } Chelovek::Chelovek(char *Fm) { ID=0; strcpy(Family,Fm); } Chelovek::Chelovek() { char *y; y=""; ID=0; strcpy(Name,y); strcpy(Family,y); strcpy(Otchestvo,y); } А в основном файле просто инклудится Chelovek.cpp. Насколько, как мне кажется, проблема скорее всего в h файле, и, насколько я знаю, за это отвечают первые две строки... Но не понимаю почему такая проблема возникает((( Подскажите пожалуйста, что именно нужно добавить или убрать, чтобы не возникало такой ошибки. Мне кажется что проблема не очень сложная (я даже ни на этом, ни на нескольких других форумах) не нашёл ответа на этот вопрос, но не очень хорошо разбираюсь в С++. Заранее всем спасибо. |
Сообщ.
#2
,
|
|
|
// h
#include <fstream> class Chelovek { private: char Name[15]; char Family[15]; char Otchestvo[15]; public: int ID; Chelovek(char *Nm,char *Fm,char *Ot); Chelovek(char *Fm); Chelovek(); ~Chelovek(){}; virtual void print()= 0;// Чистая виртуальная функция virtual int fwrite()= 0; virtual int Fwrite(std::fstream f)= 0;// Чистая виртуальная функция virtual int fread()=0;// Чистая виртуальная функция virtual int Fread(std::ifstream f)= 0; }; //cpp #include "Chelovek.h" #include <string.h> Chelovek::Chelovek(char *Nm,char *Fm,char *Ot) { ID=0; strcpy(Name,Nm); strcpy(Family,Fm); strcpy(Otchestvo,Ot); } Chelovek::Chelovek(char *Fm) { ID=0; strcpy(Family,Fm); } Chelovek::Chelovek() { char *y; y=""; ID=0; strcpy(Name,y); strcpy(Family,y); strcpy(Otchestvo,y); } попробуй |
Сообщ.
#3
,
|
|
|
Juni,
Так к сожалению, тоже не работает. Выскакивает всего 58 ошибок, начинающихся с таких: ![]() ![]() f:\институт\курсовая тех прог\kursach\chelovek.h(17) : error C2653: 'std' : is not a class or namespace name f:\институт\курсовая тех прог\kursach\chelovek.h(19) : error C2653: 'std' : is not a class or namespace name F:\ИНСТИТУТ\Курсовая Тех прог\Kursach\Kursach.cpp(173) : error C2248: 'Name' : cannot access private member declared in class 'Chelovek' f:\институт\курсовая тех прог\kursach\chelovek.h(6) : see declaration of 'Name' Далее список ошибок приводить не буду, т.к. они относятся к тому, что программа не может получить доступ к данным private. В случае, если просто убрать такие строки: ![]() ![]() #ifndef CHELOVEK_H #define CHELOVEK_H ... #endif то возникает ошибка открытия файла Chelovek.obj: ![]() ![]() LINK : fatal error LNK1104: cannot open file ".\Debug\Chelovek.obj" Error executing link.exe. |
Сообщ.
#4
,
|
|
|
По ходу компилятор переглючил. Сейчас запустил и теперь уже находится Chelovek.obj и возникают те же самые ошибки error LNK2005.
|
Сообщ.
#5
,
|
|
|
Цитата антиКИЛЛЕР @ А в основном файле просто инклудится Chelovek.cpp. Насколько, как мне кажется, проблема скорее всего в h файле, Проблема в том, что ты инклудишь .cpp-файл. Так не делается. Добавляй .cpp в проект и всё, инклудь где нужно только .h-файл |
Сообщ.
#6
,
|
|
|
Hryak,
Браво! Да действительно, проблема была именно в этом!! |