2013-01-02 37 views
0

在我正在处理的图中,我从一个数据文件中取得了一些国家,并将其存储到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; 
    } 
} 
+0

我认为最相关的部分失踪将是你在做'查找国家信息任何[时间]后'的位置 –

+0

让我们看看你的'CContinet'和它的'国家'成员的声明。这可能是因为你在push_back中的&而发生的。 – Foggzie

回答

3

你的问题是你如何传递指针和引用。你有CCountry*List

list<CCountry*> countries; 

所以你addCountry功能应该看起来更像是:

void CContinent::addCountry(CCountry* country) 
{ 
    countries.push_back(country); 
} 
+0

这解决了它,但代码仍然存在一个错误。谢谢你的帮助。 – SwiftCore

+0

NP。我猜如果你遇到的问题不同于问题中讨论的那些问题,你总是可以开始一个新的问题:] – Foggzie

+0

它实际上似乎正在工作。我正在做一个最终的测试,看看这个图是否正确构建,但我感觉非常乐观。我想你以前在这里帮助过我,所以尽情享受你的快乐。 :-) – SwiftCore

0

新的bug UPDATE:这是一个类似的错误在大陆的addCountry。我改变了CCountry中的addNeighbor函数,看起来像addCountry,它工作。谢谢你们的帮助!