Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при создании полиморфной функции, Опять, не могу понять... 
:(
    Опции темы
Zero
Дата 23.10.2005, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Void @ 22.10.2005, 20:37)
И еще, пожалуйста, в следующий раз постарайся локализовать ошибку, а не выкладывать весь проект.

Заранее извиняюсь, за опять двадцать пять, но у меня опять есть ошибка, которую я не как не могу понять, почему она происходит... smile
Единственное, что у меня получилось понять, это причина в том, что эта функция заново определена, т.е. она была включена в другой модуль, и там является членом класса, а в новом классе который я унаследовал, от старого я там хочу добавить функцию с тем же именем, но переопределить её... (это К/Р и препод сказал, что полиморфизм обязательно должени быть... smile )

Ошибка возникает в :
Код

Test->Select_of_file();  //даже не заходит в её текущее определение


Для вызова этой функции, необх.:
запустить программу, и нажать в левом нижнем углу кнопку открытия файла, и выбрать файл с назаванием "111.txt", который я также прекрипил, в папку
В книге написано, что слово virtual нужно вставить и всё, а на самом деле я так делаю и всё равно не работает, и компилятор ошибок не каких не выдаёт нормальных... smile Помогите понять в чём всётаки причина??? smile

Это сообщение отредактировал(а) Zero - 23.10.2005, 20:23

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  TEST.zip 11,29 Kb
PM MAIL ICQ   Вверх
Void
Дата 23.10.2005, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Код
TEST1 *Test;

Что за бред? Где определение класса TEST1? Честное слово, я в твоем коде уже ничего не понимаю. Наследования не видно.
Цитата(Zero @ 23.10.2005, 22:20)
Для вызова этой функции, необх.:
запустить программу, и нажать в левом нижнем углу кнопку открытия файла, и выбрать файл с назаванием "111.txt", который я также прекрипил, в папку

А также необходим Билдер... smile Который есть не у всех.
Цитата(Zero @ 23.10.2005, 22:20)
и компилятор ошибок не каких не выдаёт нормальных...

А какие выдает? Полный листинг ошибок, плиз.

Это сообщение отредактировал(а) Void - 23.10.2005, 20:45


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Zero
Дата 23.10.2005, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Void @ 23.10.2005, 21:44)
Что за бред? Где определение класса TEST1? Честное слово, я в твоем коде уже ничего не понимаю. Наследования не видно.

Да нее, Void, ты просто забыл заглянуть в *.h файл, там интерфейс класса описан...
Я вчера, прочитал книгу про эту реализацию, оказывается с точки зрения хорошего стиля, интерфейс и реализацию надо в разных файлах писать... smile Вот пример наследования:
Код

class TEST1 : public TEST
{
   public:
     virtual void Select_of_file();
     //Выбрать из файла содержимое и переписать в структуру класса

Цитата(Void @ 23.10.2005, 21:44)
А также необходим Билдер...  Который есть не у всех.

Блин... smile А как же ты вчера то определил? smile телепат чтоли... smile
Цитата(Void @ 23.10.2005, 21:44)
А какие выдает? Полный листинг ошибок, плиз.

В том, то и фиг что не выдаёт...
Единственное что выдаётся ─ это сообщение, походу не компилятором, а операционной системой:
Цитата
Project RT.exe raised exception class EAccessViolation with message 'Access violation at address 0041C52 in module 'Rt.exe'. Read of addres 00000000'/ Process stoped. Use Step or Run to continue.

PM MAIL ICQ   Вверх
BreakPointMAN
Дата 23.10.2005, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



Zero ты какой-то кривенький сырец кинул... вот что при компиляции у меня выдает:
Цитата

Build
  [C++ Error] MainClass.cpp(106): E2316 'Edit9' is not a member of 'TForm1'
  [C++ Error] MainClass.cpp(121): E2316 'OpenDialog1' is not a member of 'TForm1'
  [C++ Error] MainClass.cpp(212): E2316 'Edit9' is not a member of 'TForm1'
  [C++ Error] MainClass.cpp(215): E2316 'RadioButton1' is not a member of 'TForm1'
  [C++ Error] MainClass.cpp(216): E2316 'RadioButton2' is not a member of 'TForm1'
  [C++ Error] MainClass.cpp(220): E2316 'RadioButton1' is not a member of 'TForm1'
  [C++ Error] MainClass.cpp(221): E2316 'RadioButton2' is not a member of 'TForm1'



--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Zero
Дата 23.10.2005, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(BreakPointMAN @ 23.10.2005, 22:18)
кривенький сырец кинул...

Извиняюсь, он походу у меня в каталоге проекта из соседнего брал CT.h, а на рабочем глюкал,
вот теперь, я проверил, есть всё что нужно.

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  TEST.zip 14,47 Kb
PM MAIL ICQ   Вверх
Void
Дата 23.10.2005, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(Zero @ 23.10.2005, 23:02)
Да нее, Void, ты просто забыл заглянуть в *.h файл, там интерфейс класса описан...

А-а, пардон. Открыл, увидел в начале сгенеренный Билдером код формы, и дальше смотреть не стал smile
Но может быть тогда подскажешь, где Test инициализируется? Вроде все посмотрел, не нашел.
Цитата(Zero @ 23.10.2005, 23:02)
Read of addres 00000000'/ Process stoped.

По-моему, ты вчерашнее исправление благополучно потер smile Судя по всему, в Test опять лежит NULL.
Код
Test = new TEST1;

при инициализации формы... Ы?
Цитата(Zero @ 23.10.2005, 23:02)
А как же ты вчера то определил? smile телепат чтоли... smile

Около того smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Zero
Дата 23.10.2005, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Void @ 23.10.2005, 22:58)
По-моему, ты вчерашнее исправление благополучно потер  Судя по всему, в Test опять лежит NULL.

Нее... не потёр... Сегодня уже другая програ, вчера создание тест-файлов, а сёдня чтение...
Ну почемуто, не получается сёдня мне возпользоватся:
Код

Test = new TEST1;

И при создании, и при показе и просто отдельно если на кнопку делать, то выдаётся сообщение не как не отменяемое:
Цитата
[Linker Error] Unresolved external 'TEST1::Select_of_file()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\КУРСОВАЯ РАБОТА\ПРОСМОТР ФАЙЛОВ ТЕСТИРОВАНИЯ\READTEST.OBJ

Цитата(Void @ 23.10.2005, 22:58)
в Test опять лежит NULL.

А я ещё проверил, заместо:
Код

  Test->Select_of_file();

Если поставить например:
Код

  Test->Ocenka(); //Это добавленная процедура, которая отсутствует в базовом классе, и с ней всё нормально... Тут определённо какой то глюк связанный с полиморфизмом, только я не знаю что за место слово "Вирутуал" можно поставить

PM MAIL ICQ   Вверх
Void
Дата 23.10.2005, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Убери из определения TEST1 описание Select_of_file. Этот метод так и так будет унаследован от TEST, а объявив его в наследнике, мы тем самым показали, что хотим переопределить его - но не сделали этого - ведь тело TEST1::Select_of_file нигде не определено, о чем компилятор недвусмысленно сообщил.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
BreakPointMAN
Дата 23.10.2005, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



Zero, вот скажи мне, зачем ты описания и определения своих классов засунул туда же, где находится описание класса формы (ReadTest.h) и реализация (ReadTest.cpp)? Разве нельзя было создать отдельные .h и .cpp-файлы и подключить их потом к проекту?

Почему не воспользовался советом, и у тебя по-прежнему в коде красуются многочисленные SpeedButton1, SpeedButton2, ..., SpeedButton5, Label1, Label2, ...Label4 и т.д? Ведь осмысленные имена если давать, то код сразу станет гораздо нагляднее и понятнее.


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Zero
Дата 23.10.2005, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Void @ 23.10.2005, 23:25)
Убери из определения TEST1 описание Select_of_file. Этот метод так и так будет унаследован от TEST

Да то что он будет унаследован и так, то ето понятно.... Но мне то нужно, именно чтобы унаследовать, а потом переопределить... Т.е. чтобы был полиморфизм в классе, это обязательно по условиям курсовой р.
Цитата(Void @ 23.10.2005, 23:25)
ведь тело TEST1::Select_of_file нигде не определено, о чем компилятор недвусмысленно сообщил.

Как не определено, оно у меня определено в файле ReadTest.cpp smile
PM MAIL ICQ   Вверх
BreakPointMAN
Дата 23.10.2005, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



Цитата(Zero @ 23.10.2005, 22:32)
Как не определено, оно у меня определено в файле ReadTest.cpp

там определено TEST::Select_of_file(), а не TEST1::Select_of_file()


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Zero
Дата 23.10.2005, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(BreakPointMAN @ 23.10.2005, 23:30)
Почему не воспользовался советом, и у тебя по-прежнему в коде красуются многочисленные SpeedButton1, SpeedButton2, ..., SpeedButton5, Label1, Label2, ...Label4 и т.д? Ведь осмысленные имена если давать, то код сразу станет гораздо нагляднее и понятнее.

Хм... smile Привычка у меня такая, да я ими и не пользуюсь, т.е. я когда мне что нужно, сначала, отктываю форму, а потом смотрю имя объекта и с ним работаю, а в процедурах использую коментарии... А в данных программах, коментарии для кнопок не имеют смысла, т.к. препод только к классам придерается.
Цитата(BreakPointMAN @ 23.10.2005, 23:30)
скажи мне, зачем ты описания и определения своих классов засунул туда же, где находится описание класса формы (ReadTest.h) и реализация (ReadTest.cpp)? Разве нельзя было создать отдельные .h и .cpp-файлы и подключить их потом к проекту?

Можно, но ведь же нет разници, где их и как подключать, да к тому же путаницы больше будет.... То сейчас, с 4-мя файлами работаю, а то потом с 6-ю надо будет... smile
PS: а всётаки, как сделать чтобы компилятор не выдавал ошибки во время выполнения и полиморфизм оставить??? smile
Добавлено @ 22:41
Цитата(Zero @ 23.10.2005, 23:38)
там определено TEST::Select_of_file(), а не TEST1::Select_of_file()

Только что поставил, и не какой разницы... Тут полтергейст чтоли завёлся... smile
PM MAIL ICQ   Вверх
BreakPointMAN
Дата 23.10.2005, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



Цитата(Zero @ 23.10.2005, 22:38)
Можно, но ведь же нет разници, где их и как подключать, да к тому же путаницы больше будет....

Не вижу логики. Что, проще разбираться с кодом, когда у тебя все в один файл запихано? Когда несколько файлов, можно разнести и сгруппировать классы, функции по назначению, например... А листинги длинной в километры... увольте!


Цитата(Zero @ 23.10.2005, 22:38)
То сейчас, с 4-мя файлами работаю, а то потом с 6-ю надо будет...

гмм... я видел проекты, в которых и не по одной сотне файлов было... и ничего, живут люди.


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Zero
Дата 23.10.2005, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Ладно, завтра, перекину....
А всётаки, в чём же ошибка полиморфизации... Я уже пол дня сёдня с одной строчкой не как не разбирусь... smile smile smile
PM MAIL ICQ   Вверх
BreakPointMAN
Дата 23.10.2005, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



Цитата(Zero @ 23.10.2005, 22:49)
А всётаки, в чём же ошибка полиморфизации...

тебе уже ответили...


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.