在我正在处理的图中,我从一个数据文件中取得了一些国家,并将其存储到CCountry对象中,然后将这些对象存储在CContinent对象中,这些对象存储在名为world的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();
};
新的bug:
所以它贯穿现在的整个程序,这是很好的,但我主要增加了一个测试输出,看它是否是让所有邻居都正确。现在的问题是它获得了正确的邻居数量,但当被问及他们的名字是什么时,它只是说到倒数第二个国家。有任何想法吗?
仅供参考,代码如下。
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;
}
}
新的bug:
所以现在它贯穿于整个程序,这是一个加号。但是,当我要求它给我的名称的邻国在该计划的主体,它给了我一个(通常)正确数量的邻国的名单,所有的倒数第二个国家的名称。不知道为什么。这是代码。
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;
}
}
我认为最相关的部分失踪将是你在做'查找国家信息任何[时间]后'的位置 –
让我们看看你的'CContinet'和它的'国家'成员的声明。这可能是因为你在push_back中的&而发生的。 – Foggzie