Я думаю, что у меня есть проблема с циклической зависимостью и понятия не имею, как ее решить .... Чтобы быть как можно короче: Я кодирую что-то вроде анализатора html. У меня есть файл main.cpp и два файла заголовка Parser.h и Form.h. Эти файлы заголовков держат целые определения ... (я слишком ленив, чтобы сделать соответствующие .cpp файлы ...циклическая зависимость ... как решить?
Form.h выглядит следующим образом:
//... standard includes like iostream....
#ifndef Form_h_included
#define Form_h_included
#include "Parser.h"
class Form {
public:
void parse (stringstream& ss) {
// FIXME: the following like throws compilation error: 'Parser' : is not a class or namespace name
properties = Parser::parseTagAttributes(ss);
string tag = Parser::getNextTag(ss);
while (tag != "/form") {
continue;
}
ss.ignore(); // >
}
// ....
};
#endif
и parser.h выглядит как это:
// STL includes
#ifndef Parser_h_included
#define Parser_h_included
#include "Form.h"
using namespace std;
class Parser {
public:
void setHTML(string html) {
ss << html;
}
vector<Form> parse() {
vector<Form> forms;
string tag = Parser::getNextTag(this->ss);
while(tag != "") {
while (tag != "form") {
tag = Parser::getNextTag(this->ss);
}
Form f(this->ss);
forms.push_back(f);
}
}
// ...
};
#endif
не знаю, если это важно, но я делаю сборку в MS Visual Studio Ultimate 2010 и бросает меня «Parser»: это не класс или пространство имен имя
Как решить эту проблему? Спасибо!
Решение не должно быть таким ленивым;) –
@ 500-InternalServerError: :-) Так значит, я должен отделить определения и декларации? Это поможет? – Novellizator
@Tomy: Да, без разделения это практически невозможно. –