头文件报错,求详解,谢谢

qq8974 2010-06-02 07:50:36
写一个哈弗曼编码算法的程序,自己写了一个哈弗曼树的头文件,报错。因为基础不好,所以求详解。谢谢各位!O(∩_∩)O
template<class T>
class HufTreeNode
{
friend class HuffmanTree<T> ;
private:
T data;
HufTreeNode<T> *leftChild;
HufTreeNode<T> *rightChild;

};

template <class T>
class HuffmanTree
{
protected :
HufTreeNode<T> *root;
public:
HuffmanNode()
{
root = new HufTreeNode<T>;
}
HuffmanTree(HuffmanTree<T> &t1,HuffmanTree<T> &t2)
{
root = new HufTreeNode<T>;
root ->leftChild = t1.root;
root ->rightChild= t2.root;
root ->data=t1.root->data+t2.root->data;

} ;
HuffmanTree<T> *create(T *weight,int n);
int getMinWeight(HuffmanTree<T> **hNode,int num);

};


template<class T>
int HuffmanTree<T>::getMinWeight(HuffmanTree<T> **hNode,int num)//用两个**?
/*根据给定n个权值weight[]构造哈弗曼数。
每次从森林中找到权值最小的两棵树,设置一个大小为2n+1的数组hNode,其元素类型是指向哈弗曼树的指针。
初始时存放的是由n个权值构造的只有根节点的n棵树的指针,当某棵树的根结点已经被选作最小权值的根后,
数组中对应元素值置为空,避免后续操作又选到这棵树。*/
{
T minweight;
minweight=MAXWEIGHT;
int k=-1;
for (int j=0;j<num;j++)//num 是数组元素个数+1
if(hNode[j]!= NULL&& hNode[j]->root->data<minweight)
{
minweight=hNode[j]->root->data;
k=j;

}
return k;

}

template<class T>
HuffmanTree<T>::create(T *weight,int n)
{
HuffmanTree<T> **hNode,*t1,*t2,*t;
hNode=new HuffmanTree<T> *[2*n+1];
int curnum=n;
HuffmanTree<T> *leaf=new HuffmanTree<T> [n];
for(int i=0;i<n;i++)
{
leaf[i].root->data=weight[i];
leaf[i].root->leftChild=NULL;
leaf[i].root->rightChild=NULL;
hNode[i]=&(leaf[i]);

}
for (i=0;i<n-1;i++)
{
int k=getMinWeight(hNode,curnum);
if(k!=-1)
{t1=hNode[k];hNode[k]=NULL;}
k=getMinWeight(hNode,curnum);
if(k!=-1)
{t2=hNode[k];hNode[k]=NULL;}
HuffmanTree<T> *newTree=new HuffmanTree<T>(*t1,*t2);
hNode[curnum++]=newTree;
t=newTree;
}
return t;
}

再次谢谢大家
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2010-06-02
  • 打赏
  • 举报
回复
luodonglong 2010-06-02
  • 打赏
  • 举报
回复
在HufTreeNode类前面先声明一下HuffmanTree类
qq8974 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 weixiaoshashou 的回复:]

错在哪?原因?
[/Quote]
1>Huffman1.cpp
1>f:\我的程序\huffman1\huffman1\tree1.h(5) : error C2059: 语法错误 : “<”
1> f:\我的程序\huffman1\huffman1\tree1.h(11): 参见对正在编译的类 模板 实例化“HufTreeNode<T>”的引用
1>f:\我的程序\huffman1\huffman1\tree1.h(5) : error C2238: 意外的标记位于“;”之前
1>f:\我的程序\huffman1\huffman1\tree1.h(34) : error C2989: “HuffmanTree”: 类 模板 已经声明为非类 模板
1> f:\我的程序\huffman1\huffman1\tree1.h(5) : 参见“HuffmanTree”的声明
1>f:\我的程序\huffman1\huffman1\tree1.h(13) : error C3857: “HuffmanTree”: 不允许使用多个 模板 参数列表
1>f:\我的程序\huffman1\huffman1\tree1.h(38) : error C2143: 语法错误 : 缺少“;”(在“<”的前面)
1>f:\我的程序\huffman1\huffman1\tree1.h(38) : error C2988: 不可识别的模板声明/定义
1>f:\我的程序\huffman1\huffman1\tree1.h(38) : error C2059: 语法错误 : “<”
1>f:\我的程序\huffman1\huffman1\tree1.h(38) : error C2039: “getMinWeight”: 不是“`global namespace'”的成员
1>f:\我的程序\huffman1\huffman1\tree1.h(59) : error C2039: “create”: 不是“`global namespace'”的成员
1>f:\我的程序\huffman1\huffman1\tree1.h(60) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:\我的程序\huffman1\huffman1\tree1.h(60) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
weixiaoshashou 2010-06-02
  • 打赏
  • 举报
回复
错在哪?原因?

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧