Problème de classe

Résolu/Fermé
Khornaej Messages postés 6 Date d'inscription mardi 16 janvier 2018 Statut Membre Dernière intervention 14 janvier 2019 - Modifié le 7 janv. 2019 à 14:44
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 7 janv. 2019 à 14:35
Bonjour,

j'ai le message suivant lorsque je débugue :

error: request for member 'ChargerFic' in 'calendrier', which is of non-class type 'CCalendrier(std::vector<std::__cxx11::basic_string<char> >,
std::vector<std::__cxx11::basic_string<char> >, std::vector<std::__cxx11::basic_string<char> >,
std::vector<std::__cxx11::basic_string<char> >, std::vector<std::__cxx11::basic_string<char> >,
std::vector<std::__cxx11::basic_string<char> >)'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

à la ligne 17 du fichier main.cpp, je ne comprends absolument pas pourquoi...

OBJECTIF:
ouvrir un fichier texte d'un nombre de lignes inconnu, de 6 champs séparés par un délimiteur (;) et terminé par ce même délimiteur
stocker chaque champs dans un tableau différent: tous les premiers champs de chaque ligne dans le tableau0, ... jusqu'à tableau5

voici les codes:

//CCalendrier.hpp

#ifndef CCALENDRIER_H_INCLUDED
#define CCALENDRIER_H_INCLUDED

#include <vector>
#include <string>

//=========================
class  CCalendrier
{
 private :
    std::vector<std::string> calendDate;
    std::vector<std::string> calendHeure;
    std::vector<std::string> calendEquipDom;
    std::vector<std::string> calendScorDom;
    std::vector<std::string> calendScorExt;
    std::vector<std::string> calendEquipExt;

 public :
    CCalendrier();
    CCalendrier (std::vector<std::string> c_Date,std::vector<std::string> c_Heure,std::vector<std::string> c_EquipDom,std::vector<std::string> c_ScorDom,std::vector<std::string> c_ScorExt,std::vector<std::string> c_EquipExt);
    ~CCalendrier();

 void ChargerFic();
 void  Afficher();

};
//=========================


#endif  //CCALENDRIER_H_INCLUDED


-------------------------------------------------------------------------
/
/CCalendrier.cpp

#include <sstream>
#include <iostream>
#include <fstream>

#include "CCalendrier.hpp"
//=========================
CCalendrier::CCalendrier(std::vector<std::string> c_Date,std::vector<std::string> c_Heure,std::vector<std::string> c_EquipDom,std::vector<std::string> c_ScorDom,std::vector<std::string> c_ScorExt,std::vector<std::string> c_EquipExt)
    {
    std::vector<std::string> calendDate=c_Date;
    std::vector<std::string> calendHeure=c_Heure;
    std::vector<std::string> calendEquipDom=c_EquipDom;
    std::vector<std::string> calendScorDom=c_ScorDom;
    std::vector<std::string> calendScorExt=c_ScorExt;
    std::vector<std::string> calendEquipExt=c_EquipExt;
    }
//=========================
void CCalendrier::ChargerFic()

{
    char nomfichier[20];
    std::string ligne;
    const std::string lim = ";";
    std::string enreg;

    std::cout << "Entrer le nom du fichier: ";
    std::cin.get (nomfichier,20);    // get c-string
    std::ifstream fichier(nomfichier, std::ios::in);

if(fichier)  // si l'ouverture a réussi
{
    while ( std::getline( fichier, ligne ) )
    {
  for (int j=0; j<=5; j++)
  {
   int deb=0;
   std::size_t postn = ligne.find(lim);
   std::string newligne = ligne.substr(postn);
   enreg = ligne.substr(deb,postn);

std::cout << "CAPACITE"<< j<< "NOMBRE ELEMENTS"<< j<< '\n';
   switch(j)
   {
    case 0:calendDate.push_back(enreg);
    case 1:calendHeure.push_back(enreg);
    case 2:calendEquipDom.push_back(enreg);
    case 3:calendScorDom.push_back(enreg);
    case 4:calendScorExt.push_back(enreg);
    case 5:calendEquipExt.push_back(enreg);
   }

  newligne = ligne.substr(postn + 1);
  deb = postn + 1;
  ligne = newligne;
        }

    }



}
else
    std::cerr << "Impossible d'ouvrir le fichier !" << std::endl;
}
//=========================
void CCalendrier::Afficher()
{

}

----------------------------------------------------------------------
//main.cpp

#include "CCalendrier.hpp"
//#include "CCategories.hpp"
//=========================

int main()
{
    std::vector<std::string> c_Date;
    std::vector<std::string> c_Heure;
    std::vector<std::string> c_EquipDom;
    std::vector<std::string> c_ScorDom;
    std::vector<std::string> c_ScorExt;
    std::vector<std::string> c_EquipExt;
//=========================
 CCalendrier calendrier(std::vector<std::string> c_Date,std::vector<std::string> c_Heure,std::vector<std::string> c_EquipDom,std::vector<std::string> c_ScorDom,std::vector<std::string> c_ScorExt,std::vector<std::string> c_EquipExt);  // appel du constructeur avec 100 comme argument
 calendrier.ChargerFic(); ERREUR

 //calendrier.Afficher();
//std::cout << "TAILLE : "<< c_TC.capacity() << "     "  << c_TC[0] << "     "  << "NBR ELEMS : " << c_NE<< "     "  << c_TC[53] << '\n';
}


Merci par avance pour votre aide
Cordialement, khornaeg

3 réponses

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
7 janv. 2019 à 10:45
Bonjour,

Pour appeler une fonction ou un constructeur, il faut fournir les paramètres nécessaires, mais en aucun cas il ne faut indiquer leur type avant (c'est la déclaration qui a besoin du type.)
CCalendrier calendrier(c_Date, c_Heure, c_EquipDom, c_ScorDom, c_ScorExt, c_EquipExt); // appel du constructeur avec 100 comme argument
0
Khornaej Messages postés 6 Date d'inscription mardi 16 janvier 2018 Statut Membre Dernière intervention 14 janvier 2019 1
7 janv. 2019 à 11:13
Bonjour Dalfab,

Effectivement, je n'ai plus l'erreur, par contre le débogueur signale 3 erreurs liés au destructeur par défaut "~CCalendrier()", d'où une nouvelle question, pourquoi la déclaration du destructeur par défaut ne fonctionne pas?
Peux-tu m'éclairer?

Cordialement, Khornaej
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
7 janv. 2019 à 14:35
Il est où le destructeur?
Il est déclaré mais n'est jamais défini. Pour avoir un destructeur par défaut, un moyen simple c'est de ne pas le déclarer ou de la définir dans la classe par
~CCalendrier() = default;
0