首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

本人初学者看建了一个类,出错信息看不懂,大侠们请赐教。

2012-03-06 
本人菜鸟看建了一个类,出错信息看不懂,大侠们请赐教。。编辑环境是在VC++2005.project是一个CLR的;project名

本人菜鸟看建了一个类,出错信息看不懂,大侠们请赐教。。
编辑环境是在VC++2005.
project是一个CLR的;
project名字tree;

本菜鸟写了一个BiTree类,是一个二叉树的实现。
相关文件如下:BiTree.h文件
#ifndef BiTree_H
#define BiTree_H
template <class T>
 struct BiNode //二叉树的结点结构
{ T data;  
  BiNode<T> *lchild, *rchild;
};
template <class T>
class BiTree
{ public:
  BiTree( ); //构造函数,初始化一棵二叉树空树
  BiTree(BiNode<T> *root );
  ~BiTree(); //析构函数
BiNode<T>* Getroot(); //获得指向根结点的指针
  void PreOrder(BiNode<T> *root); //前序遍历二叉树
  void InOrder(BiNode<T> *root); //中序遍历二叉树
  void PostOrder(BiNode<T> *root); //后序遍历二叉树
  // void LeverOrder(BiNode<T> *root); //层序遍历二叉树
void deleAllNode(BiNode<T> *root);
  private:
  BiNode<T> *root; //指向根结点的头指针
  BiNode<T> *Creat( BiNode<T> *root); //有参构造函数调用
  void Release(BiNode<T> *root); //析构函数调用 
}; 
#endif
————————————BiTree.cpp文件——————————————————————————————————#include "StdAfx.h"
#include "BiTree.h"

template<class T>
BiTree<T>::BiTree()
{
  root = new BiNode<T>;
  root ->lchild=NULL;
  root->rchild=NULL;
}

template<class T>
void BiTree<T>::deleAllNode(BiNode<T> *root)
{

if(root->lchild)
{
deleAllNode(root->lchild);
}
if(root->rchild)
{
deleAllNode(root->rchild);
}
  delete root;
}
template<class T>
BiTree<T>::~BiTree()
{
if(root!=NULL)
deleAllNode(root);
}

template<class T>
BiTree<T>::BiTree(BiNode<T> *root )
{
cout<<"创建节点:"<<Creat(root)<<endl;

}
template<class T>
BiNode<T> *BiTree<T>::Creat( BiNode<T> *root) //有参构造函数调用
{  
if(root!=0)
{  
BiNode<T> *Root=new BiNode<T>;
Root ->lchild=NULL;
  Root->rchild=NULL;
return 0;

}else{
BiNode<T> *Root = new BiNode<T>;
Root ->lchild=Creat(root-1);
  Root->rchild=Creat(root-1);
 
}
return Root;
}
template<class T>
void BiTree<T>::PreOrder(BiNode<T> *root)
{
if(root==NULL) return;
else{
cout<<root->data<<" ";
  PreOrder(root->lchild);
PreOrder(root->rchild);
}
}

template <class T>
void BiTree<T>::InOrder (BiNode<T> *root)
{
  if (root==NULL) return; //递归调用的结束条件  
  else{
  InOrder(root->lchild); //中序递归遍历root的左子树
  cout<<root->data<<" "; //访问根结点的数据域
  InOrder(root->rchild); //中序递归遍历root的右子树
}
}

template <class T>
void BiTree<T>::PostOrder(BiNode<T> *root)

  if (root==NULL) return; //递归调用的结束条件
  else{
  PostOrder(root->lchild); //后序递归遍历root的左子树
  PostOrder(root->rchild); //后序递归遍历root的右子树
  cout<<root->data<<" "; //访问根结点的数据域
}
}

template <class T>
BiNode<T>* BiTree<T>::Getroot()
{
if(root==null)  
return 0;
else 
return root;
}

template <class T>
void BiTree<T>::Release(BiNode<T> *root)
{
delete root;


}


————————————tree.cpp文件一个调用函数——————————————————————————————
// tree.cpp: 主项目文件。

#include "stdafx.h"
#include "BiTree.h"
using namespace System;

int main(array<System::String ^> ^args)
{
  BiTree<char> t;
  return 0;
}
———————————————编译时错误提示———————————————————————————————
------ 已启动生成: 项目: tree, 配置: Debug Win32 ------
正在链接...
tree.obj : error LNK2028: 无法解析的标记(0A000009) "public: __thiscall BiTree<char>::~BiTree<char>(void)" (??1?$BiTree@D@@$$FQAE@XZ),该标记在函数 "int __cdecl main(void)" (?main@@$$HYAHXZ) 中被引用
tree.obj : error LNK2028: 无法解析的标记(0A00000A) "public: __thiscall BiTree<char>::BiTree<char>(void)" (??0?$BiTree@D@@$$FQAE@XZ),该标记在函数 "int __cdecl main(void)" (?main@@$$HYAHXZ) 中被引用
tree.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall BiTree<char>::~BiTree<char>(void)" (??1?$BiTree@D@@$$FQAE@XZ),该符号在函数 "int __cdecl main(void)" (?main@@$$HYAHXZ) 中被引用
tree.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall BiTree<char>::BiTree<char>(void)" (??0?$BiTree@D@@$$FQAE@XZ),该符号在函数 "int __cdecl main(void)" (?main@@$$HYAHXZ) 中被引用
C:\Documents and Settings\breezy\我的文档\tree\Debug\tree.exe : fatal error LNK1120: 4 个无法解析的外部命令
生成日志保存在“file://c:\Documents and Settings\breezy\我的文档\tree\tree\Debug\BuildLog.htm”
tree - 5 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========

——————————————————————————————————————————————————————

<br>
本人菜鸟经验有限,看不懂错误。。
麻烦各位大侠们相助。。。。

[解决办法]
模板的声明和定义要放一起,所以你要把BiTree.cpp的内容写到BiTree.h
[解决办法]
如1楼所说。这说明你的编译器还不太支持c++标准。
[解决办法]
如1楼所说。说明编译器不太支持c++标准。
[解决办法]
几乎现在所有的编译器都不支持模板的定义与实现分离,所以你还是乖乖的把它们放一起吧,要不然编译器就罢工了...
[解决办法]
教科书上说,export可以

唉,支持export,真的有这么难么???
[解决办法]
呵呵 现在的编译器还没那么先进
相对来说 模板是比较新的 所以对模板的支持不够
[解决办法]
vs2005都不行

热点排行
Bad Request.