[C++] Problème de classes

Problème de classes [C++] - C++ - Programmation

Marsh Posté le 06-04-2003 à 21:25:37    

J'aimerais déclarer une classe principale dont les fonctions restent à être déclarer dans des classes annexes dérivant de la principale (ça s'appelle du polymorphisme, c'est ça?).
 
Le problème c'est que ça me donne des "unresolved external symbol" pour chaque fonction de la classe principale.
 
Voilà comment je la déclare:
 

Code :
  1. class CMaterial
  2. {
  3. public:
  4. CMaterial() {};
  5. ~CMaterial() {};
  6. virtual void SetAngles(float start, float stop);
  7. virtual void Process();
  8. virtual void PresentSceneImage(HWND hwnd);
  9. virtual void InitScene(float angle);
  10. virtual void AddParticles(int position, int numberofparticles);
  11. virtual void AddParticlesWithMouse(int mousex, int numberofparticles);
  12. virtual long ProcessMessage(HWND hWnd, UINT message, UINT wParam, long lParam);
  13. };


 
Puis les autres je fais simplement:

Code :
  1. class CMaterial2D : public CMaterial
  2. {
  3. je déclarer les fonctions virtual de CMaterial plus d'autres fonctions
  4. };


 
Voilà, je comprend pas pourquoi ça ne marche pas.
Merci!


Message édité par Alload le 06-04-2003 à 21:26:07
Reply

Marsh Posté le 06-04-2003 à 21:25:37   

Reply

Marsh Posté le 06-04-2003 à 21:27:45    

toute les fonctions virtuelles doivent etre implantés, a l'exception des virtuelles pures (ce que tu veux faire ici)
 
 

Code :
  1. virtual void SetAngles(float start, float stop)=0;
  2. virtual void Process()=0;
  3. virtual void PresentSceneImage(HWND hwnd)=0;
  4. virtual void InitScene(float angle)=0;
  5. ...


attention une classe contenant des virtuelles pure ne peut plus etre instancié

Reply

Marsh Posté le 06-04-2003 à 21:36:21    

Oki je teste, sinon ça veut dire quoi instanciée?

Reply

Marsh Posté le 06-04-2003 à 21:38:59    


Code :
  1. class tagada
  2. {
  3. ...
  4. };
  5. tagada machin; //instanciation d'un objet de type tagada

Reply

Marsh Posté le 06-04-2003 à 21:39:39    

Instancier, c'est créer un objet du type de ta classe (c'est clair, ce que je viens de dire :heink: ?)
 


---------------
last.fm
Reply

Marsh Posté le 06-04-2003 à 21:40:44    

Ah merde, comme on peut plus les instanciée je peux pas faire ce que je voulais...
 
En fait je désirais déclarer un classe globale puis l'initialiser avec un des variantes des classes annexes:
 

Code :
  1. CMaterial *g_pMat;
  2. void main()
  3. {
  4. g_pMat = new CMaterial2D();
  5. }


 
Y a-t-il un moyen de faire cela?

Reply

Marsh Posté le 06-04-2003 à 21:41:32    

un pointeur sur classe n'est pas une instance de cette classe, donc oui tu peux :O

Reply

Marsh Posté le 06-04-2003 à 22:51:57    

et le destructeur virtuel s'il te plait. c'est la première chose à faire quand on fait de l'héritage et du polymorphisme

Reply

Marsh Posté le 07-04-2003 à 19:26:29    

Ca marche pas le:

Code :
  1. CMaterial *pMat;
  2. int main()
  3. {
  4. pMat = new CMaterial3D(..);
  5. ...
  6. };


 
Le compilo me dit qu'on ne peut pas instancier une classe abstraite.

Reply

Marsh Posté le 07-04-2003 à 19:29:49    

Alload a écrit :

Ca marche pas le:

Code :
  1. CMaterial *pMat;
  2. int main()
  3. {
  4. pMat = new CMaterial3D(..);
  5. ...
  6. };


 
Le compilo me dit qu'on ne peut pas instancier une classe abstraite.


 
tu dois redefinir toute les fonctions virtuelles pure dans mat3d

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed