3

ハッシュ テーブルまたは AVL ツリーを使用してインデックスを作成できる Index というインターフェイスを作成しています。次のエラーが表示されます。

Undefined symbols for architecture x86_64:
  "IndexHash::IndexHash(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)", referenced from:
      _main in main.o
  "IndexHash::IndexHash()", referenced from:
      Parser::createIndex()      in Parser.o

これらは次の行から来ています:

Index* mainIn;
// creates a new index pointer
if (indexType_ == 1) {
    mainIn = new IndexAVL();
} else if (indexType_ == 2) {
    mainIn = new IndexHash();
}

これは、AVL ツリーだけの場合に機能しました。

インデックス.H

#ifndef INDEX_H
#define INDEX_H
#include <iostream>
#include <fstream>
#include <vector>
#include "WordEntry.h"
#include "Document.h"

class Index {   
public:
virtual WordEntry* search(WordEntry*&)=0;
virtual void insert(WordEntry*&)=0;
virtual void insert(string)=0;
virtual void printOut(ofstream&)=0;
virtual void createDocument(string, string, string)=0;
virtual int getNumberDocs()=0;
virtual void trim(string&)=0;
private:

};

#endif

IndexHash.h

#ifndef INDEXHASH_H
#define INDEXHASH_H

#include <iostream>
#include <fstream>
#include <vector>
#include "WordEntry.h"
#include "IndexHash.h"
#include "Document.h"
#include <tr1/unordered_map>

class IndexHash : public Index{
public:
IndexHash();
IndexHash(string);
IndexHash(const IndexHash&);
~IndexHash();
virtual WordEntry* search(WordEntry*&);
virtual void insert(WordEntry*&);
virtual void insert(string);
virtual void printOut(ofstream&);
virtual int getNumberDocs();
virtual void trim(string&);
virtual void createDocument(string, string, string);
int searchDocs(string);
Document* binarySearch(vector<Document*>*, int, int, int);
void quickSort(vector<Document*>*, int, int); 
private:
tr1::unordered_map< WordEntry*, vector<Document*> >* hashtable_;
vector<Document*>* seenDocs;

};

#endif  /* INDEXHASH_H */

IndexHash.cpp

#include "IndexHash.h"
#include "Document.h"
#include <vector>
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <istream>

using namespace std;

IndexHash::IndexHash() {
      hashtable_ = new tr1::unordered_map< WordEntry*, vector<Document*> >;
      seenDocs = new vector<Document*>;
}

...すべてを定義しています。ここにコピーして貼り付けるのは難しいです。問題はインクルードにあると想定しています。

4

0 に答える 0