これが私の HeapNode テンプレート クラスの定義です。
#ifndef HEAP_N
#define HEAP_N
template <class T>
class HeapNode{
public:
// Constructor
HeapNode(T item = T(), int new_freq = 0, int new_right = 1,
int new_left = 1, int new_parent = 1);
// Accessor Functions
T data();
int frequency();
int right_child();
int left_child();
int parent();
// Mutator Functions
void set_data(T item);
void set_frequency(int new_freq);
void set_right(int new_right);
void set_left(int new_left);
void set_parent(int new_parent);
// Operators
HeapNode operator =(const HeapNode& other);
bool operator >(const HeapNode& other);
private:
T datafield; // contains the data of the node
int freq; // frequency
int l_child; // index of left child
int r_child; // index of right child
int parent_; // index of parent
};
#include "HeapNode.template"
#endif
そして、これらはそれぞれミューテーターとアクセサー関数です:
template <class T>
void HeapNode<T>::set_data(T item){
datafield = item;
}
template <class T>
T HeapNode<T>::data(){
return(datafield);
}
関数呼び出しを行う関数は次のとおりです。
void insert_or_update(string value, Heap<HeapNode<string> >& heap){
HeapNode<string> temp;
temp.set_data(value);
temp.set_frequency(1);
string ex = temp.data(); // The seg fault actually occurs in the find() function below, but any attempt to get temp.data() seg faults so the location is irrelevant
if(!heap.empty()){
int index = heap.find(temp);
if(index != -1){
heap.inc_frequency(index);
}
else{
heap.insert(temp);
}
}
else{
heap.insert(temp);
}
}
セグフォルトは
string ex = temp.data();
ライン。
これらの関数は非文字列オブジェクトに対して機能しますが、文字列 (定数文字列と可変文字列の両方) を使用するとセグ フォールトが発生します。
私は実装を使用してみました
datafield = item;
コピー コンストラクターを使用する行:
datafield = T(item);
しかし、それもうまくいきませんでした。参照渡しも設定もしない
datafield
パブリックメンバーになり、直接変更します。
注: これは C++ 98 コンパイラでコンパイルする必要があるため、文字列移動機能は使用できません!
さらに情報が必要な場合は、お知らせください。
どうもありがとう!