これは不可解です。プログラムで CCountry::getName() 関数を使用する必要があります。奇妙なことに、それがまったく機能するかどうかをテストすると、1 つの場所では機能しますが、2 行下では機能せず、その理由がわかりません。例えば...
while(line != "---" && line != "------")
{
CCountry *tempCountry = new CCountry(line);
cout << tempCountry->getName() << flush;
(*tempContinent).addCountry(*tempCountry);
getline(filestr, line);
}
動作します。すべての国名を順番にリストします。でも...
while(line != "---" && line != "------")
{
CCountry *tempCountry = new CCountry(line);
(*tempContinent).addCountry(*tempCountry);
getline(filestr, line);
cout << tempCountry->getName() << flush;
}
動作しません。getName() を呼び出す行でセグ フォールトをスローする代わりに、国名を 1 つでも出力できません。
さらに参照するために、getName() と addCountry() の 2 つの関数を次に示します。
string CCountry::getName()
{
return *name;
}
と
void CContinent::addCountry(CCountry country)
{
(*countries).push_back(country);
}
リクエストごとに、CCountry コンストラクターは次のとおりです。
CCountry::CCountry(string in_name)
{
name = new string;
*name = in_name;
player = new int;
*player = -1;
units = new int;
*units = 0;
neighbors = new list<CCountry>;
}