Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Trajor
Зарегистрирован: 13.05.2005 Сообщения: 1 Откуда: Moscow
|
Добавлено: Пт Май 13 2005 11:14 Заголовок сообщения: C++ |
|
|
День добрый
Вопрос следующий, я пытаюсь разбить проет на несколько файлов, в частности
main.cpp - главный
num.h - заглоовочный файл для класса
num.cpp - код класса
func.cpp - код функций, использующихся в опреаторах класса
//====main.cpp
#include "num.h"
using namespace ns;
void main()
{
...
}
//====num.cpp
#include "func.cpp"
using namespace mns;
namespace ns
{
... code of class ...
};
//====num.h
#include "num.cpp"
namespace ns
{
num::num(int*, int);
num::num(int);
void num::operator -= (const num&);
void num::operator += (const num&);
bool num::operator > (num);
bool num::operator < (num);
bool num::operator == (num);
bool num::operator >= (num);
bool num::operator <= (num);
const num::operator = (const num&);
void num::print();
}
//======func.cpp
#include <iostream>
using namespace std;
#define neg -100
#define MAX 10
namespace mns
{
...code of funcs
func1
func2...
};
и возникают при Buildе следующие ошибки
func.obj : error LNK2005: "int * __cdecl mns::operS(int *,int *,char)" (?operS@mns@@YAPAHPAH0D@Z) already defined in main.obj
num.obj : error LNK2005: "int * __cdecl mns::arShl(int *)" (?arShl@mns@@YAPAHPAH@Z) already defined in main.obj
и так для каждой функции из num.h и func.cpp
Не скажете с чем это связано? Буду очень благодарен. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
DmitryShm
Зарегистрирован: 17.11.2003 Сообщения: 211 Откуда: Казань
|
Добавлено: Пт Май 13 2005 13:59 Заголовок сообщения: ваши include |
|
|
Эти #include "num.cpp" уже настараживает. Так не делается: h-файлы -- это заголовки (публично декларируемые), а до твоих cpp-файлов пользователям твоих классов пофиг. Разберись с тем, что куда у тебя входит. И если такой маньяк, то в main.cpp делай #include "num.cpp", где объявляется класс, а не #include "num.h", где его долбаная реализация. Обычно классы x.h и x.cpp делают одним блоком. Потом плохой идеей мне кажется вынесение функций логики на func.cpp. А про ошибку можно сказать одно: у тебя их будет полно. Искренне желаю тебе изучить C++ до уровня понимания книги А. Александреску про современное программирование на С++. Это действительно красивый язык. _________________ love IT |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Пн Май 16 2005 07:54 Заголовок сообщения: |
|
|
Да. во-первых , это не то что не правильно, а вообще неприлично, а во вторых, в файлах *.h, я обычно пишу следующее:
Код: | #ifndef THIS_HEADER_FILE
#define THIS_HEADER_FILE
...
...
...
#endif |
Это позволяет избежать проблемм с повторным включением этого файла |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|