【问题标题】:Difficulty with making new Nodes制作新节点的困难
【发布时间】:2012-12-13 11:53:54
【问题描述】:

我正在制作一个 Huffman 程序,我正在解码部分。我目前正在研究一个基于输入字符串创建树的函数,它创建一个 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。这意味着只要有一个 I,就会有一个空套接字排序,而 L 表示一个新的叶子,所以当你看到 ILcLd 时,你可以看到有两个叶子(c 和 d)被攻击到一个空的叶子。

我收到错误消息,说没有与 Hnode::Hnode(char&) 匹配的函数,这让我有点难以置信,因为我没有在这个函数中创建任何字符。

【问题讨论】:

  • 但是你没有这样的构造函数...,返回 new Hnode(string(&text[1], 1))...

标签: c++ function nodes


【解决方案1】:

您尝试从char 构造Hnode,但您的构造函数只允许std::stringchar 不能转换为 std::string。见the constructor documentation of basic_string

不要试图将basic_stringCharT* 构造函数与&amp;text[1] 之类的东西一起使用。这会做一些你绝对不想要的事情。

那你能做什么?使用构造函数采用size

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

【讨论】:

    【解决方案2】:

    text[1] 是一个字符。所以 new HNode(text[1]) 试图调用构造函数 Hnode::Hnode( char )。你没有提供的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多