Проблема синтаксического анализа Xerces C ++ SAX: ожидаемое имя класса перед маркером '{' - PullRequest
0 голосов
/ 29 марта 2010

Я пытаюсь выполнить пример, приведенный для реализации библиотеки C ++ Xerces XML.Я точно скопировал код, но у меня проблемы с компиляцией.

error: expected class-name before '{' token

Я искал решение и знаю, что эта ошибка может быть вызвана циклическим включением или отсутствием определения класса перед его использованием, но, как видно из кода, ятолько 2 файла: MySAXHandler.hpp и MySAXHandler.cpp.Тем не менее, класс MySAXHandler является производным от HandlerBase, который включен.

MyHandler.hpp

#include <xercesc/sax/HandlerBase.hpp>

class MySAXHandler : public HandlerBase {
public:
    void startElement(const XMLCh* const, AttributeList&);
    void fatalError(const SAXParseException&);
};

MySAXHandler.cpp

#include "MySAXHandler.hpp"
#include <iostream>

using namespace std;

MySAXHandler::MySAXHandler()
{
}

void MySAXHandler::startElement(const XMLCh* const name,
                       AttributeList& attributes)
{
    char* message = XMLString::transcode(name);
    cout << "I saw element: "<< message << endl;
    XMLString::release(&message);
}

void MySAXHandler::fatalError(const SAXParseException& exception)
{
    char* message = XMLString::transcode(exception.getMessage());
    cout << "Fatal Error: " << message
         << " at line: " << exception.getLineNumber()
         << endl;
    XMLString::release(&message);
}

Я собираю так:

g++ -L/usr/local/lib -lxerces-c -I/usr/local/include -c MySAXHandler.cpp 

Я просмотрел HandlerBase и он определен, поэтому я не знаю, почему я не могу извлечь класс из него?Должен ли я переопределить все виртуальные функции в HandlerBase?Я немного новичок в C ++.

Заранее спасибо.

1 Ответ

2 голосов
/ 29 марта 2010

Попробуйте добавить using namespace xercesc; или явно указать пространство имен для классов Xerces (например, xercesc::HandlerBase).

Редактировать: Существует также макрос XERCES_CPP_NAMESPACE_USE, который должен быть эквивалентен оператору using.

...