| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3156 人关注过本帖
标题:的左边必须有类/结构/联合
只看楼主 加入收藏
CHANC
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-12-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
的左边必须有类/结构/联合
【BST.h】
#include<iostream>
using namespace std;

#ifndef BINARY_SEARCH_TREE
#define BINARY_SEARCH_TREE

template<typename DataType>
class BST
{
private:
    //节点类(内部)
    class BinNode
    {
    public:
        DataType data;
        BinNode* left;
        BinNode* right;
        //BinNode构造函数
        //默认构造函数
        BinNode() :left(0), right(0){}
        //显示值构造函数
        BinNode(DataType item) :data(item), left(0), right(0){}
        //重载<
        bool operator<(DataType& item){ return data < item; }
        //重载>
        bool operator>(DataType& item){ return data > item; }
    };
    typedef BinNode* BinNodePointer;
    //节点类声明结束
    //辅助函数inorderAux()
    void inorderAux(ostream& out, BinNodePointer subtreePtr)const;
    //辅助函数graphAux()
    void graphAux(ostream& out, int indent, BinNodePointer subtreePtr)const;
    //辅助函数insertAux()
    void insertAux(BinNodePointer subtreePtr, const DataType&item);
/*****数据成员*****/
    BinNode* myRoot;
/*****函数成员*****/
public:
    //空构造函数
    BST();
    //判空,如果BST为空,返回true
    bool empty() const;
    //中序遍历BST,使用私有的辅助函数inorderAux()
    void inorder(ostream& out)const;
    //BST的图形输出,使用私有的辅助函数graphAux()
    void graph(ostream& out)const;
    //查找函数,如果找到,返回true
    bool search(const DataType& item)const;
    //插入函数,使用私有的辅助函数insertAux()
    void insert(const DataType& item);
};
#endif

【BST.cpp】
#include<iostream>
#include<iomanip>
#include"BST.h"

//---空构造函数的定义
template<typename DataType>
BST<DataType>::BST():myRoot(0){}
//---empty()的定义
template<typename DataType>
bool BST<DataType>::empty() const
{
    return myRoot == 0;
}
//---inorder()的定义
template<typename DataType>
void BST<DataType>::inorder(ostream& out)const
{
    innorderAux(out, myRoot);
}
//---辅助函数inorderAux()的定义
template<typename DataType>
void BST<DataType>::inorderAux(ostream& out, BinNodePointer subtreePtr)const
{
    if (subtreeRoot != 0)
    {
        inorderAux(out, subtreePtr->left);
        out << subtreeRoot->data << " ";
        inorderAux(out, subtreePtr->right);
    }
}
//---graph()的定义
template<typename DataType>
void BST<DataType>::graph(ostream& out)const
{
    graphAux(out, 0, myRoot);
}
//---辅助函数graphAux()的定义
template<typename DataType>
void BST<DataType>::graphAux(ostream& out, int indent, BinNodePointer subtreePtr)const
{
    if (subtreeRoot != 0)
    {
        graphAux(out, indent + 8, subtreePtr->right);
        out << setw(indent) << " " << subtreePtr->data << endl;
        graphAux(out, indent + 8, subtreePtr->left);
    }
}
//---查找函数的定义
template<typename DataType>
bool BST<DataType>::search(const DataType& item)const
{
    BST<DataType>::BinNode* locptr = myRoot;
    bool found = false;
    while (!found&&locptr != 0)
    {
        if (item < locptr->data)
            locptr = locptr->left;
        else if (item > locptr->data)
            locptr = locptr->right;
        else found = true;
    }
    return found;
}
//---插入函数的定义
template<typename DataType>
void  BST<DataType>::insert(const DataType& item)
{
    insertAux(myRoot, item);
}
//---辅助函数insertAux()的定义
template<typename DataType>
void BST<DataType>::insertAux(BinNodePointer subtreePtr, const DataType&item)
{
    if (subtreePtr == 0)
        subtreePtr = new BST<DataType>::BinNode(item);
    else if (item < subtreePtr->data)
        insertAux(subtreePtr->left, item);
    else if (item > subtreePtr->data)
        insertAux(subtreePtr->right, item);
    else
        cerr << "Item already in the tree\n";
}


【treetester.cpp】
#include<iostream>
#include"BST.h"
using namespace std;

int main()
{
    BST<int> intBST();
    for (int i = 0; i < 10; i++)
    {
        intBST.insert(i);
    }
    intBST.graph(cout);
}


1>------ 已启动生成:  项目: Project3, 配置: Debug Win32 ------
1>  treetester.cpp
1>c:\users\chan\documents\visual studio 2013\projects\project3\project3\treetester.cpp(10): error C2228: “.insert”的左边必须有类/结构/联合
1>c:\users\chan\documents\visual studio 2013\projects\project3\project3\treetester.cpp(12): error C2228: “.graph”的左边必须有类/结构/联合
========== 生成:  成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
2016-12-15 14:28
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
BST<int> intBST(); // 这是声明了一个函数,返回类型为 BST<int>,参数为 void
intBST.insert(i);
2016-12-15 14:36
CHANC
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-12-15
收藏
得分:0 
回复 2楼 rjsp
改了之后错误变成
1>------ 已启动生成:  项目: Project3, 配置: Debug Win32 ------
1>  treetester.cpp
1>treetester.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall BST<int>::BST<int>(void)" (??0?$BST@H@@QAE@XZ),该符号在函数 _main 中被引用
1>treetester.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall BST<int>::graph(class std::basic_ostream<char,struct std::char_traits<char> > &)const " (?graph@?$BST@H@@QBEXAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@@Z),该符号在函数 _main 中被引用
1>treetester.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall BST<int>::insert(int const &)" (?insert@?$BST@H@@QAEXABH@Z),该符号在函数 _main 中被引用
1>c:\users\chan\documents\visual studio 2013\Projects\Project3\Debug\Project3.exe : fatal error LNK1120: 3 个无法解析的外部命令
========== 生成:  成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
2016-12-15 14:41
CHANC
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-12-15
收藏
得分:0 
回复 2楼 rjsp
然后有几处subtreePtr写成了subtreeRoot 不过改回来错误还是这个
2016-12-15 14:43
CHANC
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-12-15
收藏
得分:0 
没人了吗
2016-12-15 15:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
回复 3楼 CHANC
模板不要分离编译
将cpp的代码移到h中
2016-12-15 15:13
快速回复:的左边必须有类/结构/联合
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015803 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved