Определение структуры в flex error C++

Я хочу определить структуру в программе flex:

%{

#include <math.h>
#include <string>
#include <vector>
#include <iostream>
#include <map>

struct Node{
    string action;
    vector<Node> vecini[];
};

%}

и хотя я включаю вектор и строку, я все равно получаю эти ошибки: ошибка: «строка» не называет ошибку типа: поле «vecini» имеет неполный тип

Спасибо !


person exilonX    schedule 08.01.2013    source источник
comment
Это не сработает: в момент объявления члена vecini Node является неполным типом. Вместо этого вы можете использовать std::vector<std::unique_ptr<Node>>.   -  person Alexandre C.    schedule 08.01.2013


Ответы (2)


И вектор, и строка находятся в пространстве имен std, поэтому вы должны добавить его в объявление переменных-членов этих типов. Измените код на:

%{

#include <math.h>
#include <string>
#include <vector>
#include <iostream>
#include <map>

struct Node{
    std::string action;
    std::vector<Node*> vecini[];
};

%}

РЕДАКТИРОВАТЬ: (спасибо Керреку С.Б.): также вы не можете определить вектор Node как член Node. Вместо этого используйте вектор указателей на узел следующим образом: std::vector<Node*> vecini[];

person Ivaylo Strandjev    schedule 08.01.2013
comment
@KerrekSB правда. Спасибо. Также никогда не будет работать определение вектора класса, который вы определяете как член в нем. - person Ivaylo Strandjev; 08.01.2013
comment
Здорово, что ответ такой простой :))) - person exilonX; 08.01.2013

Используйте полные имена для строки и вектора, например:

std::string action;
^^^^^^^^^^^

Обратите внимание, что строка и вектор определены только в пространстве имен std, поэтому вам нужно указать полное имя, чтобы сообщить компилятору, в каком пространстве имен их найти.

person Alok Save    schedule 08.01.2013