3

我正在创建一个名为 Index 的接口,它允许我使用哈希表或 AVL 树进行索引。我收到以下错误:

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

索引哈希.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 */

索引哈希.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