求高人帮我改下模版代码!!在线等!!!急啊~~~~~~VS2010
c++吧
全部回复
仅看楼主
level 12
jin123456bat 楼主

#ifndef HuffmanTemplate
#define HuffmanTemplate template<class TYPE>
class huffman
{
template<class TYPE>
class Node
{
public:
TYPE data; //数据
int rate; //权
Node<TYPE> * left;
Node<TYPE> * right; Node(TYPE DATA = 0,int RATE = 0)
{
data = DATA;
rate = RATE;
left = NULL;
right = NULL;
}
};
Node<TYPE> * root;
public:
//template <class TYPE>
huffman(TYPE A = 0,int RATE = 0); //构造函数
Node<TYPE> * Search(Node<TYPE> * Current,TYPE A); //搜索内容为A的节点 返回节点指针 前序遍历
void Merge(huffman<TYPE> * A); //两个树进行合并
void Clear(); //清空树
bool IsEmpty(); //判断树是否为空
void Print(huffman<TYPE> const * Current = root,int print = 1); //输出 print=1输出data print=0输出rate
}; template<class TYPE>
huffman<TYPE>::huffman(TYPE A = 0,int RATE = 0)
{
root = new Node<TYPE>(A,RATE);
} template<class TYPE>
Node<TYPE> *huffman<TYPE>::Search(Node<TYPE> const * Current,TYPE A)
{
if(Current)
{
if(A == Current->data)
return Current;
if(Current->left)
{
return Search(Current->left,A);
}
if(Current->right)
{
return Search(Current->right,A);
}
}
return NULL;
} template<class TYPE>
void huffman<TYPE>::Merge(huffman<TYPE> * A)
{
Node<TYPE> *iterator;
iterator = new Node<TYPE>();
if(A->data>data)
{
iterator->left = A;
iterator->right = root;
}
else
{
iterator->left = root;
iterator->right = A;
}
iterator->rate = A->rate+rate;
root = iterator;
} template<class TYPE>
void huffman<TYPE>::Print(huffman<TYPE> const * Current = root,int print = 1)
{
if(Current)
{
if(print)
cout<<(Current->data)?Current->data:""<<" ";
else
cout<<(Current->data)?Current->rate:""<<" ";
if(Current->left)
this->Print(Current->left,print);
if(Current->right)
this->Print(Current->right,print);
}
} template<class TYPE>
void huffman<TYPE>::Clear()
{
root = NULL;
} template<class TYPE>
bool huffman<TYPE>::IsEmpty()
{
return root==NULL;
}
#endif
2012年05月03日 10点05分 1
level 12
jin123456bat 楼主
在线等啊。。没人了吗?
2012年05月03日 10点05分 2
level 12
jin123456bat 楼主
1>d:\cpp\huffman\huffman\huffman.h(65): error C2143: 语法错误 : 缺少“;”(在“<”的前面)
1>d:\cpp\huffman\huffman\huffman.h(65): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\cpp\huffman\huffman\huffman.h(65): error C2988: 不可识别的模板声明/定义
1>d:\cpp\huffman\huffman\huffman.h(65): error C2059: 语法错误:“<”
1>d:\cpp\huffman\huffman\huffman.h(65): error C2065: “TYPE”: 未声明的标识符
1>d:\cpp\huffman\huffman\huffman.h(84): error C2065: “TYPE”: 未声明的标识符
1>d:\cpp\huffman\huffman\huffman.h(84): error C2065: “TYPE”: 未声明的标识符
1>d:\cpp\huffman\huffman\huffman.h(85): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>d:\cpp\huffman\huffman\huffman.h(85): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
总是提示错误信息。。可是我看了半天也没发现什么错误啊。。
2012年05月03日 10点05分 3
level 12
jin123456bat 楼主
哪里不明?我都是括号一个一个对的啊。。望指点。。
2012年05月03日 10点05分 5
level 12
jin123456bat 楼主
括号应该没有问题。括号有问题的话编译器会有提示的
2012年05月03日 11点05分 6
level 1
你这个好像是嵌套的类
树的类里面嵌套节点的类,两种类的类型应该是一致的,那么只要在最外层用
template <typename Type>
class hufuman { ...};
里面的class Node就和通常一样的定义,不用template
2012年05月03日 11点05分 7
level 12
jin123456bat 楼主
你是说把第7行的template去掉吗?我去掉了也不行啊
去掉了还是有错误啊
1>d:\cpp\huffman\huffman\huffman.h(43): error C2143: 语法错误 : 缺少“;”(在“<”的前面)
1>d:\cpp\huffman\huffman\huffman.h(43): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\cpp\huffman\huffman\huffman.h(43): error C2988: 不可识别的模板声明/定义
1>d:\cpp\huffman\huffman\huffman.h(43): error C2059: 语法错误:“<”
1>d:\cpp\huffman\huffman\huffman.h(43): error C2065: “TYPE”: 未声明的标识符
1>d:\cpp\huffman\huffman\huffman.h(58): error C2065: “TYPE”: 未声明的标识符
1>d:\cpp\huffman\huffman\huffman.h(58): error C2065: “TYPE”: 未声明的标识符
1>d:\cpp\huffman\huffman\huffman.h(59): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>d:\cpp\huffman\huffman\huffman.h(59): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
2012年05月03日 11点05分 8
level 12
jin123456bat 楼主
好了 我自己解决了。。
2012年05月03日 11点05分 9
1