![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 01.10.2012
Сообщений: 4
|
![]()
День добрый. Столкнулся со следующей проблемой.
Задание: создать класс, инкапсулирующий работу с файлами через стандартную библиотеку С(fopen,fclose и т.д.). Реализовать методы открытия, закрытия, записи для double,int, записи в текстовом и двоичном виде. Собственно, написал следующий код (тут описаны еще не все методы): Код:
Error3 error LNK2019: unresolved external symbol "public: __thiscall Files::~Files(void)" (??1Files@@QAE@XZ) referenced in function _main В чем конкретно моя ошибка? Подскажите, как правильно задать конструктор и методы. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,368
|
![]()
У вас нет кода деструктора, вот linker и ругается. Декларация есть, дефиниции нету.
Кроме того, обратите внимание на ваш метод Open - несколько странно получать в качестве аргумента копию класса Files. В результате у вас будут два объекта Files указывающие на один и тот же FILE |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
![]()
void Files::Open(Files f)
для функций. описанных внутри класса, раз его приписывать не нужно. функция Open - плохая. Получает объект типа File, а должна имя файла char* Files::GetName() возвращает не-константный указатель, сама функция также не константная. фтопку. отсутствую переопределенный оператор присваивания, конструктор копии. в итоге класс нежизнеспособен. для примера залезь в исходники MFC и укради оттуда класс CFile
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
![]() |
![]() |
![]() |
#4 | ||
Регистрация: 01.10.2012
Сообщений: 4
|
![]() Цитата:
Цитата:
У меня в итоге получается так(фрагмент метода и работы с ним): Код:
Код:
|
||
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,368
|
![]()
1) Зачем вам аргумент на клас Files в методе класа Files?
2) Copy constructor вам не нужен пока, потому что у вас нет деструктора. Обычно деструктор закрывает файл. Если он у вас появится БЕЗ copy constructor и assignment operator то у вас будут ДВА (а то и более) деструктора, которые будут пытаться закрыть один и тот же файл. |
![]() |
![]() |
![]() |
#6 | ||
Регистрация: 01.10.2012
Сообщений: 4
|
![]() Цитата:
Цитата:
И деструктор у меня есть. Программа работает корректно (по крайней мере делает то, что должна: записывает нужные данные в файл). |
||
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,368
|
![]()
Значит ваш деструктор не закрывает файл...
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Класс для работы с массивом в С++. | ALEX8989 | Помощь студентам | 2 | 15.04.2012 19:18 |
Класс для работы с массивом.С++ | bender91 | Помощь студентам | 2 | 14.04.2012 21:32 |
класс для работы с деревьями | CodeNOT | C++ Builder | 1 | 19.05.2011 22:23 |
Написать класс для работы с двоичными числами в Visual C++ 2008 | Maxs | Фриланс | 1 | 23.12.2009 21:07 |