2012-12-13 4 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 예제를 사용하고 있습니다. 즉, 내가있을 때마다 빈 소켓 정렬이 있고 L은 새 잎을 의미하므로 ILcLd를 볼 때 빈 칸에 두 개의 리프 (c 및 d)가 있음을 알 수 있습니다.

Hnode :: Hnode (char &)와 일치하는 함수가 없다는 오류가 발생합니다.이 함수에서 아무런 문자도 만들지 않으므로 내 마음이 조금 비뚤어집니다.

+0

하지만 생성자가 없습니다 ... 새 Hnode (string (& text [1], 1))를 반환하십시오 ... – neagoegab

답변

0

char에서 Hnode을 생성하려고 시도하지만 생성자는 std::string 만 허용합니다. charstd::string으로 변환 할 수 없습니다. the constructor documentation of basic_string을 참조하십시오.

CharT* 생성자 basic_string&text[1]과 같이 사용하고 싶지는 마십시오. 이것은 절대적으로 원하지 않는 일을합니다.

그럼 어떻게 할 수 있습니까? 생성자를 사용하여 size

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

텍스트 [1]은 char입니다. 그래서 새로운 HNode (text [1])가 생성자 Hnode :: Hnode (char)를 호출하려고합니다. 어느 것을 제공하지 않았습니다.