尝试使用指向结构向量的指针访问结构类型的错误
问题描述:
#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'
}
我弄不明白为什么我会收到上述编译错误。尝试使用指向结构向量的指针访问结构类型的错误
答
在C++中,[]
和.
的优先级高于*
。
你的最后一行
*(p_vs)[0].an_int=0;
时完全括号,是
*((p_vs[0]).an_int)=0;
由于p_vs
被宣布为
vector <a_struct> * p_vs;
这是因为如果p_vs
是vector <a_struct>
元素的数组,所以p_vs[0]
i s vector<a_struct>
。
而vector<a_struct>
对象确实没有成员an_int
。
添加一些parens,你会得到你想要的。
+0
好的,我明白了。 '*'进入parens。谢谢。 –
错误消息告诉你'*(p_vs)[0]'具有类型'vector'。 –
@射线那不应该是这样。代码如何实现? –
我在下面给出了答案。这是因为优先。 –