在我正在处理的图表中,我从数据文件中获取国家/地区,并将其存储到 CCountry 对象中,然后将它们存储在 CContinent 对象中,这些对象存储在名为 world 的 CContinent 列表中。当我在他们添加的循环中查找有关国家/地区的信息时,它为我提供了正确的信息。但是,如果我稍后查找国家/地区信息,它会显示所有国家/地区都是同一个国家/地区(添加的最后一个国家/地区)。这是我创建国家/地区列表的代码和相关的目标代码。
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;
}
}
}
C大陆声明:
class CContinent
{
string name;
list<CCountry*> countries;
public:
CContinent(string in_name);
~CContinent();
void addCountry(CCountry country);
list<CCountry*> getCountries();
string getName();
};
新错误:
所以它现在运行整个程序,这很好,但我在 main 中添加了一个测试输出,看看它是否让所有邻居都正确。现在的问题是它得到了正确数量的邻居,但是当被问及他们的名字时,它只是说倒数第二个国家。有任何想法吗?
作为参考,这里是代码。
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;
}
}
新错误:
所以现在它贯穿整个程序,这是一个加号。但是,当我要求它在程序的主体中给我邻国的名称时,它给了我一个(通常)正确数量的邻国列表,以及倒数第二个国家的所有名称。不知道为什么。这是代码。
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;
}
}