Aller au contenu


Photo
- - - - -

Arduino cast as superclass


  • Veuillez vous connecter pour répondre
2 réponses à ce sujet

#1 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 18 septembre 2016 - 07:25

Je suis en train de retaper le code de mon Bob le danseur.

http://www.robot-maker.com/forum/topic/10644-le-ptit-bob-de-path-complet/?p=72156

 

Je bloque sur un pb de c++ ou de code arduino (je ne sais pas)

 

J'ai une classe AbstractDanse et des sous-classes Danse1, Danse2, Danse3.

 

J'ai un tableau d'AbstractDanse et je veux coller mes Danses dedans ... 

 

AbstractDanse.h

Spoiler

 

AbstractDanse.cpp

Spoiler

 

Danse1.h

Spoiler

 

Danse1.cpp

Spoiler

 

Je veux faire ça :

AbstractDanse abstractDanses[MAX_DANSES];
Danse1 danse1();
abstractDanses[0] = (AbstractDanse)danse1;
 
bob:50: error: no matching function for call to 'AbstractDanse::AbstractDanse(Danse1 (&)())'
   abstractDanses[0] = (AbstractDanse)danse1;
                                      ^

 

Je comprends pas.

 

Je connais bien java qui n'a qu'une super-classe dans l'héritage. En cpp, on peut en avoir plusieurs et je suppose que cela change la donne du transtypage. 

 

En d'autres mots, je veut faire ça dans arduino : 

vector<AbstractDanse*> abstractDanses;


#2 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 19 septembre 2016 - 09:41

Euh, je vais peut-être dire une bêtise, mais il ne me semble pas qu'il y ait besoin de caster en C++, dans la mesure ou ta classe Danse est une classe AbstractDanse (mais plus spécialisée).
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#3 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 20 septembre 2016 - 09:01

Effectivement, merci :)

 

Quand je ne cast pas,

Danse1 danse1();
Danse2 danse2();
Danse3 danse3();

AbstractDanse abstractDanses[MAX_DANSES];

void setup() {
  abstractDanses[0] = danse1;
  abstractDanses[1] = danse2;
  abstractDanses[2] = danse3;
//...
}

La compilation donne :

bob:50: error: no match for 'operator=' (operand types are 'AbstractDanse' and 'Danse1()')
   abstractDanses[0] = danse1;
                     ^

Si je crée les instances des objets danses sans les (), ça passe ...

Danse1 danse1;
Danse2 danse2;
Danse3 danse3;

Une erreur de débutant :). Ce que je comprends : comme y a pas de new avec arduino, je crois qu'il ne faut pas appeler le constructeur quand il n'y a pas de paramètres ??? C'est sans certitudes ...

 

Ok pour ça. J'ai d'autres pb de compilation. Je lâche pas le morceau. Merci






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users