Erreur de déclaration: Note& au lieu de Note*

Erreur de déclaration: Note& au lieu de Note* - C++ - Programmation

Marsh Posté le 06-03-2004 à 13:04:30    

J'ai une erreur de compilation: "no matching function for call to 'Accord::getNotes(int &, Note & )..... candidates are ...(int &, Note*).
Voila la classe accord:

Code :
  1. class Accord {
  2.   private :
  3.     int my_nb_notes;
  4.   Note my_notes[4];
  5.   void nom_to_notes(string nom);
  6.   static string qualite(int nb_notes, int tierce, int quinte, int septieme);
  7.   public :
  8.     Accord();
  9.   Accord(string nom);
  10.   Accord(const Accord &a);
  11.   string  toString() const;
  12.   void setAccord(string nom);
  13.   void transpose(int intervalle);
  14.   void getNotes(int & nb_notes, Note tab_notes[]) const;
  15.   Accord & operator= (const Accord &n);
  16. };


 
 

Code :
  1. void Accord::getNotes(int & nb_notes, Note tab_notes[]) const {
  2.   nb_notes= my_nb_notes;
  3.   for (int i; i<nb_notes; i++){
  4.     tab_notes[i]=my_notes[i];
  5.   }
  6. }


 
 
le Main.cc

Code :
  1. #include "Accord.h"
  2. int main(){
  3.   int nb;
  4.   string acc= "Do";
  5.   Note tab[4];
  6.   Accord ac;
  7.   ac.getNotes(nb, tab[4]);
  8.   for (int i =0; i<nb; i++){
  9.     cout << tab[i].toString() << endl;
  10.   }
  11.   return 0;
  12. }


 
L'erreur doit être dans la déclaration du tableau de Note (classe)dans le main.cc. Un tableau est automatiquement passé par réference non ? Pourquoi l'appel ne colle pas avec le prototype dans la classe Accord ?
 
Détaillez un peu les explications  :jap: Merci


Message édité par Pwill le 06-03-2004 à 13:05:18
Reply

Marsh Posté le 06-03-2004 à 13:04:30   

Reply

Marsh Posté le 06-03-2004 à 13:29:33    

pwill a écrit :

ac.getNotes(nb, tab[4]);


 
Tu passes ici à ta fonction la cinquième note de ton tableau. C'est pour ça que le compilo n'aime pas des masses.
 
D'ailleurs, on peut avoir beaucoup plus que quatre notes dans un accord. Si tu aimes la (belle) musique, tu peux écouter le prélude op.23, n°2 en do dièse mineur de Rachmaninov pour t'en convaincre. Sur la fin, il y monte à douze notes par accord (il avait des mains de géant).

Reply

Marsh Posté le 06-03-2004 à 14:37:32    

Ok, je suis bête, 'tab' tout court suffisait à passer le tableau entier.
Sinon que désigne int * dans le message d'erreur ?
 
Je suis pas très classque, et les accords je ne connaissais pas, je viens de découvrir avec le devoir justement. Enfin les profs ont simplifié la chose parait-il :D
 
Merci


Message édité par Pwill le 06-03-2004 à 14:37:43
Reply

Marsh Posté le 06-03-2004 à 15:19:26    

Ca compile mais j'ai Segmentation fault.  
Ya un truc qui doit pas aller dans la taille des tableaux. :??:

Reply

Marsh Posté le 06-03-2004 à 15:36:19    

Code :
  1. void Accord::getNotes(int & nb_notes, Note tab_notes[]) const {
  2.   nb_notes= my_nb_notes;
  3.   for (int i; i<nb_notes; i++){
  4.     tab_notes[i]=my_notes[i];
  5.   }
  6. }


 
Ou est initialisée la variable i ?
Il y a des grandes chances que tu dépasses les bornes de ton tableau à cause de ça.
 
Je suis pas sûr que j'ai raison, mais j'essaie de faire avancer la chose ...

Reply

Marsh Posté le 06-03-2004 à 15:42:33    

Mouarf oui, en effet, il manquerait "int i=0" dans la boucle.
Pff ca doit être ca  :fou:  :ange: . Je dois pas avoir les yeux en face des trous  :sarcastic:  
Je vais essayer, ca devrait être bon.  
 
Merci !

Reply

Marsh Posté le 06-03-2004 à 20:44:53    

DocMaboul a écrit :


D'ailleurs, on peut avoir beaucoup plus que quatre notes dans un accord. Si tu aimes la (belle) musique, tu peux écouter le prélude op.23, n°2 en do dièse mineur de Rachmaninov pour t'en convaincre. Sur la fin, il y monte à douze notes par accord (il avait des mains de géant).


 
Il avait douze doigts, Rachmaninov ?

Reply

Marsh Posté le 06-03-2004 à 20:49:43    

el muchacho a écrit :


 
Il avait douze doigts, Rachmaninov ?


 
Non. Il avait des gros pouces.

Reply

Sujets relatifs:

Leave a Replay

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