标题:为什么会出现这个问题呀
只看楼主
淡雅蜻蜓
Rank: 1
等 级:新手上路
帖 子:23
专家分:8
注 册:2010-11-21
结帖率:25%
已结贴  问题点数:5 回复次数:12 
为什么会出现这个问题呀
error C2371: 'bool' : redefinition; different basic types
头文件1.h
const int maxSize=50;
 enum bool {false,true};
template<class T>
class Queue{
public:
    Queue(){};
    ~Queue(){};
    virtual void EnQueue(const T& x)=0;
    virtual bool DeQueue(T& x)=0;
    virtual bool getFront(T& x)=0;
    virtual bool  IsEmpty()const=0;
    virtual bool IsFull()const=0;
    virtual int getSize()const=0;
};
头文件sequeue.h
template<class T>
class SeQueue:public Queue<T>{
    public:
        SeQueue(int sz=10);
        ~SeQueue(){delete[] elements;}
        bool int  DeQueue(T& x);
        bool getFront(T& x);
        void makeEmpty(){front=rear=0;}
        bool  IsEmpty()const{return(front==rear)?true:false;}
        bool  IsFull()const{return((rear+1)%maxSize==front)?true:false;}
        int getSize()const{return(rear-front+maxSize)%maxSize;}
        friend ostream& operator <<(ostream& os,SeQueue<T>& Q)
        {protected:
        int rear,front;
        T *elements;
        int maxSize;
        };
源文件
#include<assert.h>
#include<iostream.h>
#include"1.h"
#include"sequeue.h"

 template<class T>
     SeQueue<T>::SeQueue(int sz):front(0),rear(0),maxSize(0){
     elements=new T[maxSize];
     assert (elements!=NULL);
 };//建立空队列

template<class T>
     bool SeQueue<T>::EnQueue(const T& x){
     if (IsFull()==true) return false;
     elements[rear]=x;
     rear=(rear+1)%maxSize;
     return true;
};//入队


template<class T>
     bool SeQueue<T>::DeQueue(const T& x){
     if (IsEmpty()==true) return false;
     x=elements[front];
     front=(front+1)%maxSize;
     return true;
};//出队


template<class T>
     bool SeQueue<T>::DeQueue(const T& x){
     if (IsEmpty()==true) return false;
     x=elements[front];
     return true;
};//取对头


template<class T>
ostream& operator <<(ostream& os,SeQueue<T>& Q){
    os<<"front="<<Q.front<<",rear="<<Q.rear<<endl;
    for(int i=front;i!=rear;i=(i+1)%maxSize;)
        os<<i<<":"<<Q.elements[i]<<endl;
    return os;
};//元素的重载




void main()
{   
    int maxSize,number,select=5;
    char s;
    cout<<"\n请输入对的大小:"<<endl;
    cin>>maxSize;
    Queue<char> Queue(maxSize);
    while(select!=4)
     {
        cout<<"\n\t\t\t************操作菜单*****************\n";
        cout<<"\t\t\t\t 1 入队"<<endl;
        cout<<"\t\t\t\t 2 出队"<<endl;
        cout<<"\t\t\t\t 3 取队头元素"<<endl;
        cout<<"\t\t\t\t 4 退出"<<endl;
        cout<<"\t\t\t************请选择序号*****************\n";
        cin>>select;
        switch(select)
        {
         case 1:
            cout<<"请输入一个队列并以.结束"<<endl;
            cin>>s;
            while(s!='.')
            {
         SeQueue.EnQueue(s);
              cin>>s
             }
            break;
         case 2:
             cout<<"请输入出队字符数:";
             cin>>number;
             cout<<"\n出队元素依次为:";
             for(int i=0;i<number;i++)
               if (Se!Queue.IsEmpty()) cout<<SeQueue.DeQueue()<<"  ";
             break;
         case 3:
             if (SeQueue.IsEmpty()){cout<<"队空"<<endl;break;}
             cout<<"队头元素为:"<<SeQueue.getFront();
             break;
         case 4:
             break;
        }
     }
       cout<<"谢谢使用"<<endl;
}


   
   


搜索更多相关主题的帖子: class void different public 
2010-11-26 19:50
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:3 
这个你将枚举变量的名字改下试试,MS是bool的类型引起的,C++有内置bool类型的

离恨恰如春草,更行更远还生。
2010-11-26 20:21
淡雅蜻蜓
Rank: 1
等 级:新手上路
帖 子:23
专家分:8
注 册:2010-11-21
得分:0 
回复 2楼 玩出来的代码
你的具体意思是?
2010-11-26 20:26
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:0 
MS这个行不通的。enum bool {false,true};

离恨恰如春草,更行更远还生。
2010-11-26 20:36
淡雅蜻蜓
Rank: 1
等 级:新手上路
帖 子:23
专家分:8
注 册:2010-11-21
得分:0 
回复 4楼 玩出来的代码
那要怎么改?
2010-11-26 21:08
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:0 
LZ啊,该怎么说呢,你是否见过如下的形式。在写程序前你应该将一些基本的语法掌握。另外你也应该学会自己调试,错误小多,给你改下,仅限与编译没问题,其他的问题逻辑非逻辑,运行时的什么就不看了,你自己琢磨吧。还有你用的时模板的分离编译,估计你的编译器也不支持。详解google模板的分离编译。呃,纯虚基类~~~要用好了。
class A
{
public:
    void f(){}
};
int main()
{
    A.f();
    return 0;
}

离恨恰如春草,更行更远还生。
2010-11-26 21:53
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:0 
类声明与实现分开比较好,即使是模板。类实现单独的源文件中
程序代码:
#ifndef HEAD
#define HEAD
const int maxSize=50;
//enum bool {false1,true1};
template<class T>
class Queue{
public:
    Queue(){};
    ~Queue(){};
    virtual bool EnQueue(const T& x)=0;
    virtual bool DeQueue(const T& x)=0;
    virtual bool getFront(const T& x)=0;
    virtual bool  IsEmpty()const=0;
    virtual bool IsFull()const=0;
    virtual int getSize()const=0;
};
#endif


程序代码:
#ifndef HEAD1
#define HEAD1
#include<iostream>
#include"head.h"
using namespace std;

template<class T>
class SeQueue:public Queue<T>{
public:
    SeQueue(int sz=10);
    ~SeQueue(){delete []elements;}
    bool   DeQueue(const T& x);
    bool  EnQueue(const T&);
    bool getFront(T& x);
    void makeEmpty(){front=rear=0;}
    bool  IsEmpty()const{return(front==rear)?true:false;}
    bool  IsFull()const{return((rear+1)%maxSize==front)?true:false;}
    int getSize()const{return(rear-front+maxSize)%maxSize;}
    friend ostream& operator <<(ostream& os,SeQueue<T>& Q);
protected:
    int rear,front;
    T *elements;
    int maxSize;
};
#endif


程序代码:
#include<assert.h>
#include<iostream>
#include"head.h"
#include"head1.h"
using namespace std;

int main()
{   
    SeQueue<char> s;
    return 0;
}

离恨恰如春草,更行更远还生。
2010-11-26 21:59
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:0 
哎,少了个。
程序代码:
#include<iostream>
#include<cassert>
#include"head1.h"
using namespace std;


template class SeQueue<char>;

template<class T>
SeQueue<T>::SeQueue(int sz):front(0),rear(0),maxSize(0){
    elements=new T[maxSize];
    assert (elements!=NULL);
};//建立空队列

template<class T>
bool SeQueue<T>::EnQueue(const T& x){
    if (IsFull()==true) return false;
    elements[rear]=x;
    rear=(rear+1)%maxSize;
    return true;
};//入队


template<class T>
bool SeQueue<T>::DeQueue(const T& x){
    if (IsEmpty()==true) return false;
//    x=elements[front];
    front=(front+1)%maxSize;
    return true;
};//出队


template<class T>
bool SeQueue<T>::getFront(T& x){
    if (IsEmpty()==true) return false;
    x=elements[front];
    return true;
};//取对头


template<class T>
ostream& operator <<(ostream& os,SeQueue<T>& Q){
    os<<"front="<<Q.front<<",rear="<<Q.rear<<endl;
    for(int i=front;i!=rear;i=(i+1)%maxSize;)
        os<<i<<":"<<Q.elements[i]<<endl;
    return os;
};//元素的重载

离恨恰如春草,更行更远还生。
2010-11-26 22:00
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:0 
那个bool的事,C++中有bool类型无需在定义同样的类型而不用C++内部的bool。删除元素那若要取得删除的元素将形参定义为非const ,

[ 本帖最后由 玩出来的代码 于 2010-11-26 22:03 编辑 ]

离恨恰如春草,更行更远还生。
2010-11-26 22:02
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:3 
bool 是关键字,不能自己用来定义。
2010-11-26 23:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-327004-1-1.html




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

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