2012-12-01 61 views
1
#include<iostream> 
#include<vector> 
#include<string> 
#include<list> 
using namespace std; 

struct record{ 
    int id; 
    string fName; 
}; 
struct cells{ 
    list<record> rec[100]; 
}; 
vector<cells> hp(100); 

int main() 
{ 
    hp[0].rec[0].front().fName = "jon"; // problem occurs here 
    return 0; 
} 

我有2个结构。第一个结构体struct record由2个常规变量组成。在结构2中,我有一个类型为record的链表,其中包含结构1中列出的所有变量。为什么当我试图访问结构体中的变量时,使用我的向量,我得到错误:为什么我的向量不能访问嵌套结构中的变量?

"linked list iterator not dereferencable?" 
+1

为什么你有'**'? – Pubby

+0

来表示发生问题的区域。我也更改为代码来显示矢量和列表的大小,仍然不起作用 – chucknorris

+0

@chucknorris:你在谈论什么“列表大小”?你从来没有把任何东西放进你的名单你的清单是空的。你尝试在空列表上调用'front()'。 – AnT

回答

0

发生错误是因为您的所有列表都是。在空容器上拨打front()是非法的。

+0

Chuck Norris可以在空容器上调用'front()'。 –

+0

查克·诺里斯即使没有容器,也可以调用'前部'。 – user93353

0

如果我这样做是正确,

变化

vector<cells> hp(100); 

vector<cells> hp(100, cells{{list<record>(1, record())}}); 
+0

该行代码有错误。没有在我的编译器中工作 – chucknorris

+0

@chucknorris:[现场示例](http://ideone.com/C1KCcX)。 –

0

这就是你需要

struct cells 
{ 
    list<record> rec; 

    cells():rec(100) {} 
}; 

vector<cells> hp(100); 


int main() 
{ 
    hp.front().rec.front().fName = "jon"; 
    return 0; 
} 

在你的代码,如果你有一个数组100 list s,你基本上有100个列表,每个列表都未初始化。您不需要100 list s。您需要1 list和100 records。我已经在上面展示了如何做到这一点。

这个编译也工作正常。

+0

很好,谢谢。 – chucknorris

+0

@chucknorris - 如果有效接受答案 - http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work。这将增加您的声誉,也是我的。它也将作为你的答案正确的记录。 – user93353

0

单元格是一个100列表的数组......每一个都是未初始化的。

相关问题