Я учусь программировать на C ++ и сталкиваюсь с проблемой: у меня есть структура Professeur, где Cours и Etudiant - это другие структуры (здесь нет проблем):
struct Professeur {
std::string Nom;
int Ancien;
Cours* ListeDeCours;
Etudiant* ListeDEtudiant;
Professeur* Suivant;
};
В моей программе я читаю файл и сохраняю данные в этой структуре.Однако, когда я хочу отобразить информацию, хранящуюся в «Suivant» Professeur, у меня возникает проблема, см .:
Файл данных:
Prof1
1
Cours11
Cours12
Cours13
&
Etudiant11
Etudiant12
Etudiant13
$
Prof2
2
Cours21
Cours22
Cours23
&
Etudiant21
Etudiant22
Etudiant23
$
И вывод:
2
1
1
6304032
Как видите, newprof-> Ancien не дают мне того же значения, и я не знаю почему, поскольку я не изменяю его (я полагаю).Итак, я сделал тестовую программу, где я сам создаю свою структуру, и она отлично работает:
Я искал все, но не знаю, почему это не работает .. Может кто-нибудь взглянуть?Большое спасибо
Вот код, в котором должна быть найдена проблема: test.cpp
ifstream fichier;
vector<DossierProfesseur::Professeur> ContainerProf;
vector<DossierProfesseur::Cours> ContainerCours;
vector<DossierProfesseur::Etudiant> ContainerEtudiant;
DossierProfesseur::DossierProfesseur(string FP){
fichier.open(FP);
if (fichier.is_open() ){
Professeur premier = DossierProfesseur::CreationListeProfesseur();
tete = &premier;
Professeur *newprof = DossierProfesseur::getNextProf(tete);
cout<< newprof->Ancien<<"\n";
cout<< tete->Ancien<<"\n";
cout<< tete->Ancien<<"\n";
cout<< newprof->Ancien<<"\n";
}
else{
printf("Error while openning file");
}
}
DossierProfesseur::Professeur* DossierProfesseur::getNextProf(DossierProfesseur::Professeur* prof){
return prof->Suivant;
}
DossierProfesseur::Professeur DossierProfesseur::CreationListeProfesseur(){
Professeur prof;
Cours cours;
Etudiant etudiant;
if(!fichier.eof()){ //Fin du fichier
getline(fichier,prof.Nom);
string ancien;
getline(fichier,ancien);
prof.Ancien = stoi(ancien);
Professeur nextProf = DossierProfesseur::CreationListeProfesseur();
prof.Suivant = &nextProf;
}
else{
prof.Nom = string();
prof.Ancien = 0;
prof.ListeDeCours = NULL;
prof.ListeDEtudiant = NULL;
prof.Suivant = NULL;
}
ContainerProf.push_back(prof);
return ContainerProf.back();
}
int main()
{
string dest = "FP.txt";
DossierProfesseur dos (dest);
return 0;
}
test.h:
#ifndef DossierProfesseur_h
#define DossierProfesseur_h
#include <iostream>
#include <fstream>
#include <cstring>
#include <stdlib.h>
class DossierProfesseur
{
public:
DossierProfesseur(std::string FP);
struct Cours{
std::string Sigle;
Cours* Suivant;
};
struct Etudiant{
std::string Sigle;
Etudiant* suivant;
};
struct Professeur {
std::string Nom;
int Ancien;
Cours* ListeDeCours;
Etudiant* ListeDEtudiant;
Professeur* Suivant;
};
Professeur CreationListeProfesseur();
Professeur *getNextProf(Professeur *prof);
Professeur* tete;
private:
};
#endif
Редактировать: Используя векторы, яимеют тот же вывод, что и ранее:
2 - 0x7ffe26c10520
1
1
6320480 - 0x7ffe26c10520
Они указывают на один и тот же адрес, но имеют разные значения. Чтобы использовать векторы, я использовал это: vector ContainerProf;как глобальная переменная И затем в CreationListeEtudiant: если я возвращаю проф, я возвращаю это:
ContainerProf.push_back(prof);
return ContainerProf.back();
Я что-то сделал не так?