Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Проблемы с определением функций в классе

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Проблемы с определением функций в классе
Имя
Сообщение << Старые топики   Новые топики >>
Проблемы с определением функций в классе - 2009-02-07 15:45:48.910000   
Dgedit

Сообщений: 131
Оценки: 0
Присоединился: 2007-02-04 15:07:37.163333
Такая проблемка: пишу простой класс ля работы со строками, описание класса в *.h, вот код
class MString { public: typedef unsigned char byte; //конструкторы MString():size(),s(){ }; MString(const char ch, byte count = 1); MString(const char S[]); MString(const char *First, const char *Last); MString(const char S[], byte ind, byte count=-1); MString(const MString &S, byte ind, byte count=-1); private: byte size; char s[256]; }; Реализаия методов в другом файле *.cpp, вот код:
#include &lt;cstring&gt; #include "Mstring.h" MString::MString(const char ch, byte count) { MString t; t.size = count; memset(t.s, ch, count); *this = t; } ////////////////////////////////////////////////////// MString::MString(const char Ss[]) { MString t; if(strlen(Ss)&gt;255) t.size = 255; else t.size = strlen(Ss); memcpy(t.s, Ss, t.size) *this = t; } ////////////////////////////////////////////////////// MString::MString(const char *First, const char *Last) { MString t; if(First &lt; Last) { if( Last - First &gt; 255) t.size = 255; else t.size = Last - First; memcpy(t.s, First, t.size); } *this = t; } ///////////////////////////////////////////////////////// MString::MString(const char S[], byte index, byte count) { MString t(S+index, S+index+count); *this = t; } ///////////////////////////////////////////////////////// MString::MString(const MString &S, byte index, byte count) { MString t; if( (count &gt; S.size) || (index+count &gt; S.size) ) t.size = S.size - index; else t.size = count; if( t.size &gt; 0) memcpy(t.s, (S.s+index), t.size); *this = t; } ////////////////////////////////////////////////////////////// Потом в третьем файле просто объявляю пару объектов этого класса для проверки работы конструктора:
#include "Mstring.cpp" #include &lt;conio.h&gt; int main() { MString a; MString v('q', 10); int p; p+=10; getch(); return 1; } И мне тут же выскакивает ошибка при линковке:
Str.obj : error LNK2005: "public: __thiscall MString::MString(char,unsigned char)" (??0MString@@QAE@DE@Z) already defined in MString.obj
и такая ошибка для каждого конструктора с соответствующим прототипом. Поскажите пожалуйста в чем проблема.
Post #: 1
RE: Проблемы с определением функций в классе - 2009-02-07 16:16:04.090000   
VENOM4X

Сообщений: 246
Оценки: 0
Присоединился: 2008-02-18 22:49:08.960000
В третьем файле тебе надо инклудить не "Mstring.cpp", а "Mstring.h".
Post #: 2
RE: Проблемы с определением функций в классе - 2009-02-07 17:41:58.980000   
Dgedit

Сообщений: 131
Оценки: 0
Присоединился: 2007-02-04 15:07:37.163333
Спасибо - заработало, только не понимаю как в третьем файле узнают о реализации конструктора во втором файле если я его не инклудю никуда?
Post #: 3
RE: Проблемы с определением функций в классе - 2009-02-08 01:26:29.710000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: Dgedit

Спасибо - заработало, только не понимаю как в третьем файле узнают о реализации конструктора во втором файле если я его не инклудю никуда?


http://www.cplusplus.com/doc/tutorial/preprocessor.html
http://www.cyberguru.ru/programming/cpp/cpp-language-straustrup2-page51.html
Post #: 4
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Проблемы с определением функций в классе







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.