2011-10-01 75 views
0
#include <iostream> 
#include <vector> 
using namespace std; 

struct a_struct { int an_int; }; 

int main() 
{ 
    vector <vector <a_struct> > the_vec; 
    vector <a_struct> * p_vs; 
    p_vs = & the_vec[0]; 
    *(p_vs)[0].an_int=0; //error: 'class __gnu_debug_def::vector<a_struct, 
          //std::allocator<a_struct> >' has no member named 'an_int' 
} 

我弄不明白为什么我会收到上述编译错误。尝试使用指向结构向量的指针访问结构类型的错误

+1

错误消息告诉你'*(p_vs)[0]'具有类型'vector '。 –

+0

@射线那不应该是这样。代码如何实现? –

+0

我在下面给出了答案。这是因为优先。 –

回答

2

在C++中,[].的优先级高于*

你的最后一行

*(p_vs)[0].an_int=0; 

时完全括号,是

*((p_vs[0]).an_int)=0; 

由于p_vs被宣布为

vector <a_struct> * p_vs; 

这是因为如果p_vsvector <a_struct>元素的数组,所以p_vs[0] i s vector<a_struct>

vector<a_struct>对象确实没有成员an_int

添加一些parens,你会得到你想要的。

+0

好的,我明白了。 '*'进入parens。谢谢。 –

相关问题