CLucene の小さなラッパーを作成しています。
ofxCLucene.h
#ifndef _OFXCLUCENE_
#define _OFXCLUCENE_
#include "ofMain.h"
#include "ofxXmlSettings.h"
#include "ofxDirList.h"
#include "CLucene.h"
using namespace lucene;
using namespace lucene::analysis;
using namespace lucene::analysis::standard;
using namespace lucene::index;
using namespace lucene::document;
using namespace lucene::queryParser;
using namespace lucene::search;
using namespace lucene::store;
class ofxCLucene {
private:
string name;
SimpleAnalyzer *sanalyzer;
Directory *dir;
IndexWriter *writer;
IndexReader *reader;
public:
ofxCLucene(string name);
~ofxCLucene();
void addDocumentsFromDirectory(string pathToDir);
void addDocumentXML(ofxXmlSettings *docXML);
void indexReader();
void closeIndex();
Hits* search(string query);
};
#endif
ofxCLucene.cpp
#include "ofxCLucene.h"
//------------------------------------------------------------------------------
ofxCLucene::ofxCLucene(string name) {
this->name = name;
sanalyzer = new SimpleAnalyzer();
}
...
問題なくコンパイルできますが、プロジェクトに配置して新しいオブジェクトを作成すると、エラーが発生しました。
"vtable for lucene::analysis::Analyzer", referenced from:
__ZTVN6lucene8analysis8AnalyzerE$non_lazy_ptr in ofxCLucene.o
(maybe you meant: __ZTVN6lucene8analysis8AnalyzerE$non_lazy_ptr)
"vtable for lucene::analysis::SimpleAnalyzer", referenced from:
__ZTVN6lucene8analysis14SimpleAnalyzerE$non_lazy_ptr in ofxCLucene.o
(maybe you meant: __ZTVN6lucene8analysis14SimpleAnalyzerE$non_lazy_ptr)
ld: symbol(s) not found
collect2: ld returned 1 exit status
両方のソース コードは次のとおりです。
class Analyzer:LUCENE_BASE{
public:
virtual TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader)=0;
virtual ~Analyzer(){
}
virtual int32_t getPositionIncrementGap(const TCHAR* fieldName);
};
class SimpleAnalyzer: public Analyzer {
public:
TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader);
~SimpleAnalyzer(){}
};
名前空間の問題だと思ったので、電話してみます
analyzer::SimpleAnalyzer *sanalyzer = new analyzer::SimpleAnalyzer();
しかし、問題は残ります。
提案?ありがとうございました