Ошибка при попытке доступа к типу структуры с помощью указателя на вектор структур - PullRequest
0 голосов
/ 01 октября 2011
#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 Ответ

2 голосов
/ 01 октября 2011

В 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] является vector<a_struct>.

И vector<a_struct> объекты действительно не имеют члена an_int.

Добавьте несколько паренов, и вы получите то, что хотите.

...