Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 12
1

Наследование и полиморфизм: найти и исправить ошибки в коде

24.12.2016, 14:37. Показов 538. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возникла проблема с наследованием и полиморфизмом. В общем, в программе есть суперкласс Unit. Его наследует потомки Ball и Player. В свою очередь, от Ball и Player тоже исходят потомки, например FirstBall и Crab .
Вот создаю объекты классов и указатель на базовый класс Unit для применения полиморфизма:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FirstBall ball1;
SecondBall ball2;
ThirdBall ball3;
FourthBall ball4;
FifthBall ball5;
 
Unit *poly_ball;
 
Crab crab1;
Spider spider1;
Butterfly butt1;
Frog frog1;
 
Unit *poly_player1;
Unit *poly_player2;
Далее в зависимости от условий присваиваю указателю необходимые обьекты и вызываю функцию Tick:

C++
1
2
3
4
5
6
7
8
9
10
11
12
if (fB == 0) poly_ball = (Unit*)&ball1;
if (fB == 1) poly_ball = (Unit*)&ball2;
if (fB == 2) poly_ball = (Unit*)&ball3;
if (fB == 3) poly_ball = (Unit*)&ball4;
if (fB == 4) poly_ball = (Unit*)&ball5;
    
if (fP1 == 0) poly_player1 = (Unit*)&crab1;
if (fP1 == 1) poly_player1 = (Unit*)&butt1;
if (fP2 == 0) poly_player2 = (Unit*)&spider1;
if (fP2 == 1) poly_player2 = (Unit*)&frog1;
 
gameChange.tick(poly_ball, poly_player1, poly_player2);
Вот так выглядит функция tick. Мы принимаем указатели, и вызываем 2 функции collision и border, которые находятся в классе Player!
C++
1
2
3
4
5
6
7
8
void tick(Unit *poly_ball, Unit *poly_player1, Unit *poly_player2) 
{
poly_player1->collision(poly_ball);
poly_player2->collision(poly_ball);
 
poly_player1->border(1);
poly_player2->border(2);
}
Так вот, компилятор выдает ошибку, что collision: не является членом "Unit" и border: не является членом "Unit".
Почему он не видит эти 2 функции в промежуточном классе Player? Я подозреваю что как то неправильно создаю указатель, потому что если убрать класс Unit и заменить Player и Ball, то все работает.

Добавлено через 26 минут
А..хм, все уже работает.

Добавлено через 9 минут
А нет, не работает =/
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2016, 14:37
Ответы с готовыми решениями:

Найти ошибки в коде и исправить эти ошибки (Наследование)
Вот в общем 3 файла, изучаю наследование на примере односвязного и двусвязного списков: list.h...

Найти причины возникновения ошибок в коде и исправить эти ошибки (наследование)
Помогите понять в чем ошибки. header.h: #include <iostream> #include <string> using namespace...

Наследование шаблонных классов: найти причины возникновения ошибки в коде и исправить эту ошибку
подскажите почему появляется такая ошибка error C2248: 'Base<int,float>::value1' : cannot access...

Найти ошибки в коде и исправить эти ошибки - C++
Судя по вываливающейся ошибки, идет двойное освобождение памяти. У самого не получается отловить...

0
24.12.2016, 14:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2016, 14:37
Помогаю со студенческими работами здесь

Найти ошибки в коде и исправить эти ошибки
Есть у меня вот такой код: #include <iostream> using namespace std; class A{ private:...

Найти и исправить ошибки в коде
Подскажите пожалуйста, дорогие граждане форума. Где я накосячил?) #include <iostream> using...

Найти и исправить ошибки в коде
#include <stdint.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR*...

Найти и исправить ошибки в коде
program Kalyn_lab4_1 ; const x=3.241; var y,a:real ; begin a:=1.15;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru