2012-12-13 29 views
0

我正在製作霍夫曼程序,我在解碼部分。我目前正在研究一個基於輸入字符串創建樹的函數,它創建一個h節點樹並返回一個指針。製作新節點時的困難

#include <iostream> 
#include <cstdlib> 

using namespace std; 

struct Hnode{ 
string data; 
int count; 
Hnode *left, *right; 
Hnode(string data) : data(data), count(0), left(NULL), right(NULL) {} 
Hnode() : data(""), count(0), left(NULL), right(NULL) {} 
Hnode(Hnode *left, Hnode *right) : data(""), count(0), left(left), right(right) {} 

Hnode * readTree(string &text) 
{ 
if (text[0]=='L') 
    return new Hnode(text[1]) 
else { 
    string s = text.substr(1,text.size()); 
    return new Hnode(readTree(s), readTree(s)); 
    } 
} 

要簡單介紹一下我寫我的編碼,所以我收到一個字符串,告訴我有什麼哈夫曼樹的樣子。例如,我正在使用示例ILaILbILrILcLd。這意味着每當有一個空插座sorta時,L表示一個新葉,所以當你看到ILcLd時,你可以看到有兩個葉(c和d)被攻擊到一個空葉。

我收到錯誤,說沒有與Hnode :: Hnode(char &)匹配的函數,這讓我的腦海裏有些微不足道,因爲我沒有在這個函數中做任何字符。

+0

但你沒有這樣的構造函數...,返回新的Hnode(string(&text [1],1))... – neagoegab

回答

0

您嘗試從char構建Hnode,但您的構造函數只允許std::stringchar不能轉換爲std::string。見the constructor documentation of basic_string

不要試圖使用basic_stringCharT*的構造函數,並使用類似&text[1]的東西。這將做你絕對不想要的東西。

那麼你能做什麼?使用構造函數size

std::string(1, text[1]); 
0

text [1]是char。所以新的HNode(text [1])試圖調用構造函數Hnode :: Hnode(char)。你還沒有提供。