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

啊疯了。关于模板类。又出错又出错,该怎么解决

2012-05-09 
啊。。。。疯了。。关于模板类。。。又出错又出错这是头文件..C/C++ code#ifndef BINARYSEARCHTREE_H#define BINARY

啊。。。。疯了。。关于模板类。。。又出错又出错
这是头文件..

C/C++ code
#ifndef BINARYSEARCHTREE_H#define BINARYSEARCHTREE_Htemplate<typename Object>class BinarySearchTree{    public:        BinarySearchTree();        ~BinarySearchTree();        BinarySearchTree( const BinarySearchTree &rhs );        BinarySearchTree &operator=( const BinarySearchTree &rhs );        /**         * 查找这棵树的最大值         * 返回该最大值         */        const Object &FindMax() const;        /**          * 用于查找这棵树的最小值         * 返回该最小值         */        const Object &FindMin() const;        /**         * 用于查询一个值是否在树里         * element是需要查找的值         * 如果element在这棵树里,返回true,否则为false         */        bool Contains( const Object &element ) const;        /**         * 用于判断一棵树是否为空         * 如果该树为空树,返回true,否则返回false         */        bool Empty() const;        /**         * 用于打印一棵树,前序         */        void PrintfTree() const;        /**         * 删除一棵树所有节点,使之为空。         */        void MakeEmpty();        /**         * 在一棵子树上插入一个节点。         * element为需要插入的数据         * 插入一个新节点         */        void Insert( const Object &element );        /**         * 在一棵子树上删除一个节点         * element为需要删除的节点         */        void Remove( const Object &element );    private:        struct Node        {            Node( const Object &element, Node *left, Node *right ):                m_element(element), m_left(left),                 m_right(right)            {            }            Object m_element;            Node *m_left;            Node *m_right;        };        Node *root;        void Insert( const Object &element, Node *&tree ) const;        void Remove( const Object &element, Node *&tree ) const;        bool Contians( const Object &element, Node *&tree ) const;        void MakeEmpty( Node *&tree );        void PrintTree( Node *tree ) const;        Node *Clone( Node *tree ) const;        Node *FindMax( Node *tree ) const;        Node *FindMin( Node *tree ) const;};#endif



这是源文件,只求编译通过

C/C++ code
#include "BinarySearchTree.h"#include <iostream>template<typename Object>BinarySearchTree<Object>::BinarySearchTree( const BinarySearchTree &rhs ){    this->operator=(rhs);}template<typename Object>BinarySearchTree<Object> &BinarySearchTree<Object>::operator=( const BinarySearchTree &rhs ){    if( this != &rhs )    {        MakeEmpty();        root = Clone( rhs.root );    }    return *this;}template<typename Object>void BinarySearchTree<Object>::MakeEmpty(){    MakeEmpty( root );}template<typename Object>void BinarySearchTree<Object>::MakeEmpty( Node *&tree ){    if( tree == NULL )    {        return;    }    if( tree->m_left != NULL )    {        MakeEmpty( tree->m_left );    }    if( tree->m_right != NULL )    {        MakeEmpty( tree->m_right );    }        delete tree;}template<typename Object>BinarySearchTree<Object>::Node *Clone( Node *tree ) const{    if( tree == NULL )    {        return NULL;    }    else    {        return new Node( tree->m_element, Clone(tree->m_left),                Clone(tree->m_right) );    }}template<typename Object>BinarySearchTree<Object>::~BinarySearchTree(){    MakeEmpty();}




[解决办法]
疯什么?照抄Mark Allen Weiss的《数据结构与算法分析C++描述》第三版也会出问题吗?
代码在此:http://users.cis.fiu.edu/~weiss/dsaa_c++3/code/CodeWin.zip
书的中文电子版在此:http://ishare.iask.sina.com.cn/f/22293000.html

------解决方案--------------------


探讨
维斯大叔说得对,但是现在大多编译器都不支持模板的分离编译,这是现实,必须面对。

[解决办法]
怎么感觉定义的那么复杂。。
[解决办法]
探讨

引用:
维斯大叔说得对,但是现在大多编译器都不支持模板的分离编译,这是现实,必须面对。

C++11标准把export template功能给撤销了。下一代标准C++1y(目标是C++17)有可能会加入正确的模块import/export,这样就有希望实现模版的分离编译。

热点排行