我正在尝试通过一个为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 ++有点陌生。

提前致谢。

最佳答案

尝试添加using namespace xercesc;或显式指定Xerces类的名称空间(例如xercesc::HandlerBase)。

编辑:还有一个XERCES_CPP_NAMESPACE_USE宏,它应该等效于using语句。

关于c++ - Xerces C++ SAX解析问题:“{” token 之前的预期类名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2540246/

10-13 06:50