Проблемы с определением функций в классе
Пользователи, просматривающие топик: 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 <cstring>
#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)>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 < Last)
{
if( Last - First > 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 > S.size) || (index+count > S.size) )
t.size = S.size - index;
else t.size = count;
if( t.size > 0)
memcpy(t.s, (S.s+index), t.size);
*this = t;
}
//////////////////////////////////////////////////////////////
Потом в третьем файле просто объявляю пару объектов этого класса для проверки работы конструктора:
#include "Mstring.cpp"
#include <conio.h>
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 и такая ошибка для каждого конструктора с соответствующим прототипом. Поскажите пожалуйста в чем проблема.
|
|
|
RE: Проблемы с определением функций в классе - 2009-02-07 16:16:04.090000
|
|
|
VENOM4X
Сообщений: 246
Оценки: 0
Присоединился: 2008-02-18 22:49:08.960000
|
В третьем файле тебе надо инклудить не "Mstring.cpp", а "Mstring.h".
|
|
|
RE: Проблемы с определением функций в классе - 2009-02-07 17:41:58.980000
|
|
|
Dgedit
Сообщений: 131
Оценки: 0
Присоединился: 2007-02-04 15:07:37.163333
|
Спасибо - заработало, только не понимаю как в третьем файле узнают о реализации конструктора во втором файле если я его не инклудю никуда?
|
|
|
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
|
|
|
|
|