私はエンコーディングクラスを作っています。現在、ビルドに失敗しています。関数内からマップをインスタンス化していますが、「抽象的ですが非仮想デストラクタを持つ 'Map::Comparator' で削除が呼び出されました」というエラー メッセージが表示されます。これを構築する方法はありますか?
これがヘッダー ファイルです。
#ifndef _encoding_
#define _encoding_
#include "bstream.h"
#include "vector.h"
#include "map.h"
#include "HuffmanTypes.h"
#include "pqueue.h"
class Encoding {
public:
Encoding();
~Encoding();
void compress(ibstream& infile, obstream& outfile);
void decompress(ibstream& infile, obstream& outfile);
//Map<ext_char, std::string> *referenceTable;
std::string compresskey;
private:
string filename;
Map<ext_char, int> getFrequency(ibstream& infile);
void createHuffman();
//Map<ext_char, int> *frequencyTable;
HuffmanPQueue huffqueue;
//void buildTree();
//void createReferenceTable();
//Node getNode(Node root);
//void tracePaths(Node root, string path, int weight);
};
#endif
cpp ファイルは次のとおりです。
/**
* File: encoding.cpp
* ------------------
* Place your Encoding class implementation here.
*/
#include "encoding.h"
#include "string.h"
#include "map.h"
#include "strlib.h"
#include "HuffmanTypes.h"
#include "pqueue.h"
using namespace std;
Encoding::Encoding() {
}
Encoding::~Encoding() {
}
void Encoding::compress(ibstream& infile, obstream& outfile) {
Map<ext_char, int> frequencyTable;
frequencyTable = getFrequency(infile);
compresskey = "";
foreach(ext_char key in frequencyTable) {
int freq = frequencyTable.get(key);
Node* newnode = new Node;
newnode->character = key;
newnode->weight = freq;
newnode->zero = NULL;
newnode->one = NULL;
huffqueue.enqueue(newnode);
string keystring = integerToString(key);
string valstring = integerToString(freq);
compresskey = compresskey + "Key = " + keystring + " " + "Freq = " + valstring + " ";
}
//buildTree();
//createReferenceTable();
}
void Encoding::decompress(ibstream& infile, obstream& outfile) {
}
Map<ext_char, int> Encoding::getFrequency(ibstream& infile) {
Map<ext_char, int> frequencyTable;
int ch;
while((ch = infile.get()) != EOF){
if(frequencyTable.containsKey(ch)){
int count;
count = frequencyTable.get(ch);
frequencyTable[ch] = ++count;
}
else {
frequencyTable.put(ch, 1);
}
}
frequencyTable.put(PSEUDO_EOF, 1);
return frequencyTable;
}