本人菜鸟看建了一个类,出错信息看不懂,大侠们请赐教。。
编辑环境是在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都不行