Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1423 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°665197
Pwill
Deux fois Né
Posté le 06-03-2004 à 13:04:30  profilanswer
 

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
mood
Publicité
Posté le 06-03-2004 à 13:04:30  profilanswer
 

n°665217
docmaboul
Posté le 06-03-2004 à 13:29:33  profilanswer
 

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).

n°665268
Pwill
Deux fois Né
Posté le 06-03-2004 à 14:37:32  profilanswer
 

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
n°665294
Pwill
Deux fois Né
Posté le 06-03-2004 à 15:19:26  profilanswer
 

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

n°665302
KneXtasY
Posté le 06-03-2004 à 15:36:19  profilanswer
 

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 ...

n°665312
Pwill
Deux fois Né
Posté le 06-03-2004 à 15:42:33  profilanswer
 

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 !

n°665566
el muchach​o
Comfortably Numb
Posté le 06-03-2004 à 20:44:53  profilanswer
 

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 ?

n°665569
docmaboul
Posté le 06-03-2004 à 20:49:43  profilanswer
 

el muchacho a écrit :


 
Il avait douze doigts, Rachmaninov ?


 
Non. Il avait des gros pouces.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
[ASP] Probleme avec les date , erreur avec le datatype de ma bd !Utiliser le répertoire Temp de Widnows au lieu de celui du .exe
Que veut dire ce message d'erreur ?Handle sous-menu erreur
[C++ Erreur] ComCtrls.hpp(2638): E2015 Ambiguïté entre 'Windows' et...[vb]erreur method or data member not found[reglé]
Problème pour compiler (erreur)Probleme d'interpretation d'un message d'Erreur de g++
SQL/ACCESS:erreur de requêtemessage erreur Fatal error: Failed opening required ...
Plus de sujets relatifs à : Erreur de déclaration: Note& au lieu de Note*


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR