制作新节点的难度

时间:2012-12-13 11:53:55

标签: c++ function nodes

我正在制作一个霍夫曼程序,而我正处于解码部分。我目前正在开发一个基于输入字符串创建树的函数,它创建一个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;)没有匹配的功能,这让我的想法很难理解,因为我没有在这个函数中使用任何字符。

2 个答案:

答案 0 :(得分:0)

您尝试从Hnode构建char,但您的构造函数只允许std::stringchar无法转换为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)。你没有提供。