Mon problème est que j'ai une base et 3 classes d'enfants et je voulais faire un vecteur où je peux placer tous les éléments qui sont des représentants de l'ensemble des 3 classes d'enfants. Voici la partie du code qui gèrent de depuis un fichierC++ lecture dans un fichier à vecteur de pointeurs
vector<Robot*> robots;
vector<Mac> mac;
vector<Eco> eco;
vector<Pro> pro;
vector<int> charge;
vector<int> deliver;
try {
string s;
ifstream f;
do {
cout << "Add meg a filenevet" << endl;
cin >> s;
f.open(s.c_str());
} while (!f.good());
cout << "adatok beolvasasa..." << endl;
int napok;
if (!(f >> napok)) throw 1;
charge.resize(napok);
deliver.resize(napok);
for (int i = 0; i<napok; i++) {
if (!(f>>charge[i])) throw 1;
if (!(f>>deliver[i])) throw 1;
}
string type, name;
int battery;
int m = 0; int e = 0; int p = 0;
std::string line;
while (std::getline(f, line)) {
stringstream ss(line);
if (ss >> type && ss >> name && ss >> battery) {
if (type=="Mac") {
cout << "mac" << endl;
Mac r = Mac(name,battery);
mac.push_back(r);
robots.push_back(&mac[m]);
m++;
};
if (type=="Eco") {
cout << "eco" << endl;
Eco r = Eco(name,battery);
eco.push_back(r);
robots.push_back(&eco[e]);
e++;
}
if (type=="Pro") {
cout << "pro" << endl;
Pro r = Pro(name,battery);
pro.push_back(r);
robots.push_back(&pro[p]);
p++;
};
}
}
Cela fonctionne jusqu'à présent, il compile et fonctionne aussi bien, mais lorsque je tente d'accéder à une fonction ex robots[i].getBattery();
le gel du programme. il semble que les pointeurs pointent juste dans nulle part, mais je ne sais pas pourquoi :(
Où est vous appelez à 'robots [i] .getBattery();'? Si 'mac',' eco' et 'pro' sont détruits, leurs membres le sont aussi. Cela conduit à des «robots» contenant des pointeurs vers des objets invalides. – Oswald
Ils ne sont pas détruits:/ive écrit tout cela dans la fonction principale (en espérant que cela rendra un peu plus facile) et je l'appelle dans la fonction principale aussi. – Andesz