Affichage tableau avec surcharge d'operateur d'Affichage!

Fermé
DanielDP - Modifié le 13 nov. 2020 à 10:00
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 13 nov. 2020 à 14:51
/*
J'ai toujours l'erreur ''afficher'' was not declared in this scope

À compléter pour le numéro A du TP3, automne 2020 (10 points)
tâches à faire :
1. afficher le tableau des cercles en utilisant, entre
autres, la surcharge de l'opérateur d'affichage <<
2. permuter c[0] et c[2] , c[1] et c[4]
réafficher le tableau après ces deux permutations;
3. déterminer et afficher :
a) le cercle le plus petit rayon
b) le cercle le plus grand rayon
en utilisant, entre autres :
- une seule fonction template
- la surcharge des opérateurs > et <

Critères de correction :
tâche 1. 3 points
tâche 2. 3 points
tâche 3. 4 points


*/

#include <iostream> // entrée-sortie standard
#include <iomanip>  // formatage (présentation)
#include <string>   // chaîne de caractères (détails : plus tard)
#include <fstream> 
#include <stdlib.h>
#include <string.h>


using namespace std;

const float PI = 3.14159;
class Cercle
{
 private :
  float rayon; // l'accès au champ rayon est privé

 public :
  // un constructeur : conflit entre nom de paramètre et nom de champ
     // => on utilise le pointeur this où *this est l'objet courant

     Cercle(float rayon = 5.7)
     {
      this->rayon = rayon ;// c'est même chose que (*this).rayon;
  }

  // fonction membre
  float perimetre()
  {
   return 2 * PI * rayon;
  }

  // fonction membre : définition reportée
  float surface();

 
  
        float getRayon(); // définition reportée
  void setRayon(float nouvRayon);
template <class T>
    void afficher(T tableau[], int nbElem, string mess)
 {
  cout << "\nContenu du tableau " << mess << " :\n";
  for (int i = 0; i < nbElem; i++)
     cout << setw(2) << i << ") " << tableau[i] << endl;
    
  cout << endl ;

 }
      
  // surcharger de l'opérateur d'affichage :

  friend std::ostream& operator<< (std::ostream&, const Cercle&);
   // afficher un cercle avec un message pertinent

 };



 float Cercle::surface()
 {
  return PI * rayon * rayon;
 }

 float Cercle::getRayon()
 {
  return rayon;
 }

 void Cercle::setRayon(float nouvRayon)
 {
     rayon = nouvRayon;
 }
 template <class T>
 void permuter(T & a, T &b)
 {
  T tempo = a;
  a = b;
  b = tempo;
 }
  template <class T>
 void trier(T tableau[], int nbElem)
 {
  for (int i = 0 ; i < nbElem-1; i++)
  { int indMin = i;
    for (int j = i+1; j < nbElem; j++)
     if (tableau[j] < tableau[indMin])
        indMin = j;

    if ( indMin != i)
       permuter(tableau[i], tableau[indMin]);     
  }
 }
 

 int main()
 {

   Cercle cercle[] = { Cercle(6.1), Cercle(), Cercle(7.3), Cercle (6.9),
                  Cercle(4.5), Cercle(7.1) };
   int nbCercle = sizeof(cercle) / sizeof(Cercle);

   // 1. afficher le tableau des cercles en utilisant, entre
       //autres, la surcharge de l'opérateur d'affichage <<
       afficher(cercle, nbCercle, "Cercle");
    
  return 0;
}
/* Exécution :


*/
A voir également:

2 réponses

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
13 nov. 2020 à 14:51
Bonjour,

tu as défini
afficher()
comme une fonction membre de
Cercle
. Le compilateur s'attend donc à une expression du type :
unCercle.afficher( .... )
. tu devrais peut-être définir
afficher()
en dehors de tout objet pour que ça soit une fonction libre.
Ça n'est pas facile à voir grâce à ta manière d'indenter qui permet de se perdre très vite dans ton code. Peut mieux faire.
1
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
13 nov. 2020 à 09:57
Bonjour a toi aussi,

Ce forum est nourri par des bénévoles qui prennent sur leur temps,
et personne ne donnera de solution toute faite :

https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/

et merci d'utiliser les balises de code

https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0