2011-10-01 37 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。謝謝。 –