私が取り組んでいるグラフでは、データ ファイルから取り込まれた国があり、CCountry オブジェクトに格納されます。次に、それらは CContinent オブジェクトに格納され、CContinents のリストに格納されます。追加されたループ内の国に関する情報を調べると、正しい情報が得られます。ただし、後で国情報を調べると、すべての国が同じ国であると表示されます (最後に追加された国)。国リストを作成するコードと、関連するオブジェクト コードを次に示します。
while(line != "------")
{
getline(filestr, line);
CContinent *tempContinent = new CContinent(line);
getline(filestr, line);
while(line != "---" && line != "------")
{
CCountry *tempCountry = new CCountry(line);
tempContinent->addCountry(*tempCountry);
getline(filestr, line);
//cout << tempCountry->getName() << flush;
}
world.push_back(tempContinent);
}
void CContinent::addCountry(CCountry country)
{
(countries).push_back(&country);
}
CCountry::CCountry(string in_name)
{
name = in_name;
}
他に見たいコードがあればお尋ねください。
リクエストごとに、ここでリストに後でアクセスしようとします。
homeCountry = NULL;
size_t found;
found = line.find_first_of(",");
string homeCountryName = line.substr(0, found);
for (list<CContinent*>::iterator it=world.begin(); it != world.end(); it++)
{
list<CCountry*> tempCont = (*it)->getCountries();
//cout << it->getName() << " " << flush;
for (list<CCountry*>::iterator it2=tempCont.begin(); it2 != tempCont.end(); it2++)
{
//cout << (*it2)->getName() << flush;
//cout << homeCountryName << flush;
if ((*it2)->getName() == homeCountryName)
{
*homeCountry = **it2;
}
}
}
CContinent 宣言:
class CContinent
{
string name;
list<CCountry*> countries;
public:
CContinent(string in_name);
~CContinent();
void addCountry(CCountry country);
list<CCountry*> getCountries();
string getName();
};
新しいバグ:
これでプログラム全体が実行されるようになりましたが、これは素晴らしいことですが、メインにテスト出力を追加して、すべてのネイバーが正しく取得されているかどうかを確認しました。ここでの問題は、正しい数の隣人を取得していることですが、彼らの名前を尋ねると、最後から 2 番目の国とだけ表示されます。何か案は?
参考までに、コードはこちらです。
for (list<CContinent*>::iterator it = world.begin(); it != world.end(); it++)
{
list<CCountry*> var1 = (*it)->getCountries();
for (list<CCountry*>::iterator it2 = var1.begin(); it2 != var1.end(); it2++)
{
cout << "Country: " << (*it2)->getName() << endl;
list<CCountry*> var2 = (*it2)->getNeighbors();
cout << "Neighbors: ";
for (list<CCountry*>::iterator it3 = var2.begin(); it3 != var2.end(); it3++)
{
cout << (*it3)->getName() << " ";
}
cout << endl;
}
}
新しいバグ:
そのため、プログラム全体で実行されるようになりました。これはプラスです。ただし、プログラムのメインで近隣国の名前を教えてくれるように頼むと、(一般的に) 正しい数の近隣国のリストが表示され、最後から 2 番目の国の名前がすべて表示されます。理由がわからない。これがコードです。
for (list<CContinent*>::iterator it = world.begin(); it != world.end(); it++)
{
list<CCountry*> var1 = (*it)->getCountries();
for (list<CCountry*>::iterator it2 = var1.begin(); it2 != var1.end(); it2++)
{
cout << "Country: " << (*it2)->getName() << endl;
list<CCountry*> var2 = (*it2)->getNeighbors();
cout << "Neighbors: ";
for (list<CCountry*>::iterator it3 = var2.begin(); it3 != var2.end(); it3++)
{
cout << (*it3)->getName() << " ";
}
cout << endl;
}
}