【问题标题】:Xerces C++ SAX Parsing Problem: expected class-name before '{' tokenXerces C++ SAX 解析问题:“{”标记之前的预期类名
【发布时间】:2011-02-02 04:07:42
【问题描述】:

我正在尝试运行为 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++ 有点陌生。

提前致谢。

【问题讨论】:

    标签: c++ class include header xerces


    【解决方案1】:

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

    编辑:还有XERCES_CPP_NAMESPACE_USE宏,应该相当于using语句。

    【讨论】:

    • '使用命名空间 xercesc;'没有影响,但 'xercesc::HandlerBase 摆脱了类名错误。谢谢!
    • 不客气。如果这有效,则 using 指令也必须有效,前提是它放置正确(在您的情况下,这将在 #include &lt;xercesc/sax/HandlerBase.hpp&gt; 语句之后)。但是,无论如何,替代解决方案更好,因为在标头中使用指令是危险的。 (mariusbancila.ro/blog/2009/04/14/…)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2015-01-19
    • 2017-02-19
    相关资源
    最近更新 更多