0

在我正在处理的图表中,我从数据文件中获取国家/地区,并将其存储到 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;
    }
}   
4

2 回答 2

3

您的问题在于您如何传递指针和引用。你有List一个CCountry*

list<CCountry*> countries;

所以你的addCountry函数应该看起来更像:

void CContinent::addCountry(CCountry* country)
{
    countries.push_back(country);
}
于 2013-01-02T21:02:22.250 回答
0

新的错误更新:这是与大陆的 addCountry 类似的错误。我将 CCountry 中的 addNeighbor 函数更改为看起来像 addCountry,并且它起作用了。谢谢你们的帮助!

于 2013-01-02T22:05:14.257 回答