Я пытаюсь создать родительский класс «Форма» с дочерними классами «Круг», «Треугольник», «Прямоугольник». Родительский класс содержит x pos, y pos и цвет заливки или все «фигуры», а затем каждый дочерний класс содержит информацию, специфичную для этой формы. Кто-нибудь мог бы взглянуть на мой код и посмотреть, почему я получаю ошибку «У форм нет члена setRadius» при попытке установить радиус в массиве объектов ...Анимация массива объектов дочернего класса
P.S. прямо сейчас у меня есть только дочерний класс «Круг», пока я не получу его работу. Затем я добавлю два других класса.
Кроме того, если кто-либо видит какие-либо другие ошибки в моем коде, я был бы признателен им за то, что они указаны.
Заранее спасибо
#include <allegro.h>
#include <cstdlib>
using namespace std;
#define scrX 640
#define scrY 400
#define WHITE makecol(255,255,255)
#define GRAY makecol(60,60,60)
#define BLUE makecol(17,30,214)
int random(int low, int high);
const int numCircles = random(1,50);
class Shape{
public:
Shape(){x = scrX/2; y = scrY/2; fill = WHITE;}
protected:
int x, y, fill;
};
class Circle : public Shape{
public:
Circle(){radius = 0;}
Circle(int r){radius = r;}
void setRadius(int r){radius = r;}
protected:
int radius;
};
int main()
{
// Program Initialization
allegro_init();
install_keyboard();
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT_WINDOWED, scrX, scrY, 0, 0);
// Create and clear the buffer for initial use
BITMAP *buffer = create_bitmap(scrX, scrY);
clear_to_color(buffer, GRAY);
// Set title and create label text in window
set_window_title("Bouncing Balls Ver 1.0");
textout_ex(buffer, font, "Bouncing Balls Ver 1.0", 10, 20, WHITE, GRAY);
// Draw a background box
rectfill(buffer, 50, 50, scrX-50, scrY-50, BLUE);
// Create circles
Shape **GCir;
GCir = new Shape *[numCircles];
for(int i=0;i<numCircles;i++){
GCir[i] = new Circle;
GCir[i]->setRadius(random(1,25)); // THIS IS THE ERROR
}
while(!key[KEY_ESC]){
blit(buffer, screen, 0, 0, 0, 0, scrX, scrY);
}
destroy_bitmap(buffer);
return 0;
}
END_OF_MAIN();
int random(int low, int high)
{
return rand() % (high - low) + low;
}
Я не узнал кастинг еще в классе, так что я понятия не имею, что это такое или то, что это делает ... :) ум, объясняющий, как я могу это исправить ... Надеюсь, вы увидите, что я пытаюсь сделать ... basicall using allegro, иметь несколько фигур, «подпрыгивающих» вокруг экрана. Как только я получу круги, я могу заставить другие фигуры работать. – AGSperry
Говоря компилятору, чтобы угрожать одним типом, как другой (синтаксис, показанный в ответе mohaps), называется литой. См. Http://en.wikibooks.org/wiki/C%2B%2B_Programming/Programming_Languages/C%2B%2B/Code/Statements/Variables/Type_Casting для получения дополнительной информации. – dbrank0