2012-12-13 27 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)。你还没有提供。