Я хочу написать такой код, но он не работает:вперед декларация члена структуры
struct ast;
struct parser;
struct parser
{
struct node
{
node *parent;
};
ast build_ast() //here we want to use object of ast tyoe
{
node *ret = new node;
return ast(ret);
}
};
struct ast
{
parser::node *root; //here we try to access member struct of y
ast(parser::node *rt):root(rt){}
};
Проблема заключается в том, что я пытаюсь создать в парсер объект незавершенного типа. Если я заменяю реализации структур, проблема в том, что я пытаюсь получить доступ к структуре элемента неполного типа. Очевидно, я могу решить эту проблему, сделав узел независимой структурой, но это кажется плохим, потому что я могу захотеть иметь другие типы узлов в своей программе. Вопрос в следующем: могу ли я каким-либо образом сделать декларацию forward структуры узла вне структуры синтаксического анализатора? Например:
struct ast;
struct parser;
struct parser::node; //making a forward declaration of member struct
Если этого не может быть сделано, каковы способы разрешения конфликта?
Вы никогда не вперед объявлен 'node'. –
просто объявите функцию ast build_ast() в структуре и определите ее позже, после struct ast. – arayq2
Поместите объявление и определение классов в их соответствующие заголовки и реализацию функций-членов в файле '.cpp', где вы также должны включить соответствующие заголовки. – Nawaz