我正在制作一个霍夫曼程序,而我正处于解码部分。我目前正在开发一个基于输入字符串创建树的函数,它创建一个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&amp;)没有匹配的功能,这让我的想法很难理解,因为我没有在这个函数中使用任何字符。
答案 0 :(得分:0)
您尝试从Hnode
构建char
,但您的构造函数只允许std::string
。 char
无法转换为std::string
。请参阅the constructor documentation of basic_string。
不要试图使用CharT*
的{{1}}构造函数与basic_string
之类的东西。这将做你绝对不想要的事情。
那你能做什么?使用构造函数取&text[1]
size
答案 1 :(得分:0)
text [1]是一个char。所以新的HNode(text [1])试图调用构造函数Hnode :: Hnode(char)。你没有提供。