Menu

Problème implémentation fonction amie

Messages postés
6
Date d'inscription
mardi 16 janvier 2018
Dernière intervention
14 janvier 2019
-
Bonjour le forum,

j'ai un petit problème avec une fonction amie:
aucune erreur n'est signalée (mais la syntaxe ne me semble pas repectée,"friend void AfficherEquipes(std::vector<std::string> CalendEquipDom);"
sans la résolutin de portée (CEquipes:: devant AfficherEquipes), de plus le vector final n'est pas rempli
Si la syntaxe est respectée :|error: invalid use of incomplete type 'class CEquipes'|

Objectif:
accéder à un attibut de la classe CCalendrier(le vector "c_EquipDom") à travers la procédure d'une autre classe

J'ai lu et relu plusieurs cours sur les fonctions amies, j'avoue avoir du mal à comprendre leur mise en oeuvre
merci pour votre aide et vos éclaircissements

Cordialement, Khornaej

Ci-dessous les différents fichiers:a

//main.cpp

#include "CCalendrier.hpp"
#include "CEquipes.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(c_Date,c_Heure,c_EquipDom,c_ScorDom,c_ScorExt,c_EquipExt);
Calendrier.ChargerFic();

std::vector<std::string> c_ListEquipes;
int c_NbreEquipes;

CEquipes Equipes(c_ListEquipes,c_NbreEquipes);
Equipes.TrierEquipes(c_EquipDom);
}

//CCalendrier.hpp

#ifndef CCALENDRIER_H_INCLUDED
#define CCALENDRIER_H_INCLUDED

#include <vector>
#include <string>

class CEquipes;
class CCalendrier
{
friend void AfficherEquipes(std::vector<std::string> CalendEquipDom);//si "AfficherEquipes" seul pas d'erreur mais "TrierEquipes" ne donne rien
//sinon:|error: invalid use of incomplete type 'class CEquipes'|
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() = default;

void ChargerFic();
};

#endif //CCALENDRIER_H_INCLUDED


//CCalendrier.cpp

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

#include "CCalendrier.hpp"
#include "CEquipes.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 d'un fichier existant: "; Le nom sera selectionné à partir d'une boite de dialogue
//std::cin.get (nomfichier,20); // get c-string
std::ifstream fichier("ANG.txt", 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);

switch(j)
{
case 0:
CalendDate.push_back(enreg);
break;
case 1:
CalendHeure.push_back(enreg);
break;
case 2:
CalendEquipDom.push_back(enreg);
break;
case 3:
CalendScorDom.push_back(enreg);
break;
case 4:
CalendScorExt.push_back(enreg);
break;
case 5:
CalendEquipExt.push_back(enreg);
break;
}

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

}

}
else
std::cerr << "Impossible d'ouvrir le fichier !" << std::endl;
}


//CEquipes.hpp

#ifndef CEQUIPES_H_INCLUDED
#define CEQUIPES_H_INCLUDED

#include <vector>
#include <string>

//class CCalendrier;
class CEquipes
{

private:
std::vector<std::string> ListEquipes;
int NbreEquipes;

public:
CEquipes();
CEquipes(std::vector<std::string> c_ListEquipes,int c_NbreEquipes);
void TrierEquipes(std::vector<std::string> CalendEquipDom);
~CEquipes() = default;
};

#endif // CEQUIPES_H_INCLUDED


//CEquipes.cpp

#include <algorithm>
#include <iostream>

#include "CEquipes.hpp"
#include "CCalendrier.hpp"


CEquipes::CEquipes(std::vector<std::string> c_ListEquipes,int c_NbreEquipes)
{
std::vector<std::string> ListEquipes=c_ListEquipes;
int NbreEquipes=c_NbreEquipes;
}

void CEquipes::TrierEquipes(std::vector<std::string> CalendEquipDom)
{
std::sort(CalendEquipDom.begin(), CalendEquipDom.end());
std::unique_copy(CalendEquipDom.begin(), CalendEquipDom.end(), std::back_inserter(ListEquipes));
int NbreEquipes=ListEquipes.size();

}
Afficher la suite 

Votre réponse

1 réponse

Messages postés
6
Date d'inscription
mardi 16 janvier 2018
Dernière intervention
14 janvier 2019
1
0
Merci
Résolu
Commenter la réponse de Khornaej