0

C ++XercesXMLライブラリの実装用に示した例を実行しようとしています。コードを正確にコピーしましたが、コンパイルに問題があります。

error: expected class-name before '{' token

私は解決策を探しましたが、このエラーは循環インクルードまたは使用前にクラスを定義していないことが原因である可能性があることを知っていますが、コードからわかるように、MySAXHandler.hppと2つのファイルしかありません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++に少し慣れていません。

前もって感謝します。

4

1 に答える 1

2

Xercesクラスの名前空間を追加using namespace xercesc;または明示的に指定してみてください(例xercesc::HandlerBase)。

編集:マクロもあります。これはXERCES_CPP_NAMESPACE_USE、usingステートメントと同等である必要があります。

于 2010-03-29T18:23:53.807 に答える