J'essaie de créer une classe parente "Shape" avec des classes enfants "Circle", "Triangle", "Rectangle". La classe parent contient les couleurs x pos, y pos et fill ou toutes les "formes", puis chaque classe enfant contient des informations spécifiques à cette forme. Quelqu'un pourrait-il regarder par-dessus mon code et voir pourquoi je reçois l'erreur "Shapes n'a pas de membre 'setRadius'" lorsque vous essayez de définir le rayon dans le tableau d'objets ...Animation d'un tableau d'objets de classe enfant
P.S. En ce moment, je n'ai que la classe "Cercle" jusqu'à ce que je le fasse fonctionner. Ensuite, je vais ajouter les deux autres classes.
En outre, si quelqu'un voit d'autres erreurs dans mon code, j'apprécierais qu'ils soient signalés.
Merci à l'avance
#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;
}
Je ne l'ai pas appris casting encore en classe, donc je ne sais pas ce qui est ou ce qui est fait ... :) esprit expliquant comment je peux résoudre ce problème ... J'espère que vous pouvez voir ce que j'essaie de faire ... basiquement, en utilisant allegro, avoir plusieurs formes "rebondissant" autour de l'écran. Une fois que les cercles fonctionnent, je peux faire fonctionner les autres formes. – AGSperry
Raconter le compilateur pour menacer un type comme l'autre (la syntaxe montrée dans la réponse de mohaps) est appelé casting. Voir http://en.wikibooks.org/wiki/C%2B%2B_Programming/Programming_Languages/C%2B%2B/Code/Statements/Variables/Type_Casting pour plus d'informations. – dbrank0