在我正在研究的图表中,我将国家从数据文件中取出并存储到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:
所以它现在贯穿整个程序,这很不错,但我在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;
}
}
新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;
}
}
答案 0 :(得分:3)
你的问题在于如何传递指针和引用。您有List
CCountry*
:
list<CCountry*> countries;
因此,您的addCountry
函数应该更像:
void CContinent::addCountry(CCountry* country)
{
countries.push_back(country);
}
答案 1 :(得分:0)
NEW BUG UPDATE:这是与各大洲的addCountry类似的错误。我改变了CCountry中的addNeighbor函数看起来像addCountry,它工作正常。谢谢你的帮助!