| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 670 人关注过本帖
标题:C++这个程序为什么会这样
只看楼主 加入收藏
淡雅蜻蜓
Rank: 1
等 级:新手上路
帖 子:23
专家分:8
注 册:2010-11-21
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:4 
C++这个程序为什么会这样

.cpp(126) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.
那个高手帮我解决一下  谢谢啦
#ifndef LinkNode_H
#define LinkNode_H
#ifndef  LinkedStack
#define  LinkedStack
#include
using namespace std;

template
struct LinkNode
{
        Type data;
        LinkNode *link;
        LinkNode(LinkNode *ptr=NULL) {link=ptr;}
        LinkNode(const Type& item, LinkNode *ptr=NULL)
        {data=item;link=ptr;}        
};

template
class Stack
{
    public:
        Stack(){};
        virtual void Push(const Type &item)=0;
        virtual bool Pop(Type &item)=0;
        virtual bool GetTop(Type &item) const=0;
        virtual bool IsEmpty() const=0;
        virtual int getSize() =0;

};

template
class LinkedStack:public Stack
{
    public:
        LinkedStack():top(NULL){}
        ~LinkedStack(){MakeEmpty();}
        void Push(const Type &item);
        bool Pop(Type &item);
        bool GetTop(Type &item) const;
        bool IsEmpty() const{return (top==NULL) ? true:false;}
        int getSize() ;
        void MakeEmpty();
//        friend ostream& operator<<(ostream& os,SeqStack &s);
    private:
        LinkNode *top;
};

template
void LinkedStack::Push(const Type& item)
{
    top=new LinkNode(item,top);
    assert(top!=NULL);
};

template  
bool LinkedStack::Pop(Type& item)
{
    if (IsEmpty()==true)
      return false;
    LinkNode *p=top;
    top=top->link;
    item=p->data;delete p;
    return true;
};

template  bool
 bool LinkedStack::GetTop(Type& item)const
{
    if (IsEmpty()==true)  return false;
    item=top->data;
    return true;
};



void main()
{   
    int number,select=6,i;
    char s;
//    cout<<"\n请输入栈的大小:"<//    cin>>size;
    LinkedStack stack;
    while(select!=5)
     {
        cout<<"\n\t\t\t************操作菜单*****************\n";
        cout<<"\t\t\t\t 1 入栈"<        cout<<"\t\t\t\t 2 出栈"<        cout<<"\t\t\t\t 3 取栈顶元素"<        cout<<"\t\t\t\t 4 栈中元素个数"<        cout<<"\t\t\t\t 5 退出"<        cout<<"\t\t\t************请选择序号*****************\n";
        cin>>select;
        switch(select)
        {
         case 1:
            cout<<"请输入一个字符串并以.结束"<            cin>>s;
            while(s!='.')
            {
              stack.Push(s);
              cin>>s;
             }
            break;
         case 2:
             cout<<"请输入出栈字符数:";
             cin>>number;
             cout<<"\n出栈元素依次为:";
             for(i=0;i               if (stack.Pop(s))
                   cout<             break;
         case 3:
             if (!stack.GetTop(s)){cout<<"栈空"<             cout<<"栈顶元素为:"<             break;
         case 4:            
             cout<<"栈中元素个数为:"<             break;
         case 5:
             break;
        }
     }
       cout<<"谢谢使用"<}

搜索更多相关主题的帖子: 126 unexpected include public 
2010-11-21 17:50
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:0 
cout<<"谢谢使用"<}
2010-11-22 11:54
shafeilong
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:236
专家分:1434
注 册:2009-3-21
收藏
得分:0 
不懂耶。。。
2010-11-23 10:35
記憶づシ
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-11-19
收藏
得分:0 
看不懂!!本人还没学到那么深奥的!
2010-11-23 18:47
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
收藏
得分:20 
楼主程序错误太多啦。需要更深入地了解一下C++模板地使用。还有,楼主的代码风格有点乱,看着头疼。
我在你的源码基础上,做了一些修改。参考一下。
程序代码:
/*

 * 文件名:LinkList.cpp

 * 日期:2010/11/24

 * 备注:栈模板

 * 建议:楼主,请注意以下你的代码风格。排版一下就会很美观了。
*/

/* 这些用在头文件中, 因为头文件需要被包含,这些是起到一个防止重复包含,定义作用.
[color=#0000FF]#ifndef LinkNode_H
#define LinkNode_H
#ifndef LinkedStack
#define LinkedStack
[/color]*/

#define NULL 0                                                            

#include <iostream>   
#include <cassert>        

using namespace std;

/*

 * 模板结构: 节点

 * 描述:此结构用来保存数据以及另一个节点的地址。
*/
template<class Type>
struct LinkNode
{
        Type data;                                                        /*节点数据*/
        LinkNode<Type> *link;                                            /*下一个链接节点*/

        /*
         * 构造函数
        */
        LinkNode<Type>( LinkNode<Type> *ptr=NULL)
        {
            link = ptr;
        }

        LinkNode<Type>( const Type& item, LinkNode<Type> *ptr=NULL)
        {
            data = item;
            link = ptr;
        }       
};/*--------节点--------*/

/*

 * 类名:抽象类-----栈

 * 备注:包类为抽象类,定义了栈的一些基本操作。

 * 入栈、出栈、获取栈顶元素、判空、取大小等。
*/
template<class Type>
class Stack
{
    public:
        Stack()                                                        /*默认构造函数*/
        {
        };

        virtual void Push( const Type &item)=0;                        /*入栈*/
        virtual bool Pop( Type &item)=0;                            /*出栈*/
        virtual bool GetTop( Type &item) const=0;                    /*栈顶*/
        virtual bool IsEmpty() const=0;                                /*判空*/
        virtual int getSize() =0;                                    /*大小*/
};/*--------抽象类:栈--------*/

/*

 * 栈
*/
template<class Type>
class LinkedStack : public Stack<Type>
{
public:
    LinkedStack():top(NULL)                                        /*构造函数:初始化top指针为空*/
    {
        size = 0;
    }
    ~LinkedStack()                                                /*析构函数*/
    {
        MakeEmpty();
    }

    void Push(const Type &item);                                /*入栈*/
    bool Pop(Type &item);                                        /*出栈*/
    bool GetTop( Type &) const;                                    /*栈顶*/
    bool IsEmpty() const                                        /*判空*/
    {
        return (top==NULL) ? true:false;
    }       
    int getSize();                                                /*大小*/
    void MakeEmpty();                                            /*置空*/
    //friend ostream& operator<<(ostream& os,SeqStack &s);
private:
    LinkNode<Type> *top;                                        /*栈顶指针*/
    int size;
};

/*

 * 方法名:Push

 * 参数:对应类型的数据

 * 返回值:空

 * 备注:创建一个新的链接节点
*/
template<class Type>
void LinkedStack<Type>::Push(const Type& item)
{
    top = new LinkNode<Type>( item, top);
    size++;
    assert( top != NULL);
}

/*

 * 方法名:Pop

 * 参数:一个类型数据的引用

 * 返回值:是否成功出栈

 * 备注:删除top节点,并将top指针指向Link节点.
*/
template<class Type>
bool LinkedStack<Type>::Pop(Type& item)
{
    if (IsEmpty() == true)
    {
      return false;
    }

    LinkNode<Type> *p = top;
    top = top -> link;
    item = p -> data;
    delete p;
    size--;

    return true;
}

/*

 * 方法名:GetTop

 * 参数:空

 * 返回值:
*/
template<class Type>
bool LinkedStack<Type>::GetTop(Type &item)const
{
    if (IsEmpty() == true)
    {
        return false;
    }
   
    item = top -> data;
    return true;
}

template<class Type>
int LinkedStack<Type>::getSize()
{
    return size;
}

template<class Type>
void LinkedStack<Type>::MakeEmpty()
{
    Type temp;
    for ( int i = 0; i < size; i++)
    {
        Pop( temp);
    }
}

void main()
{  
    int number, select = 6, i = 0, size;
    char s, temp;                                                                /*临时变量,用于存放中间出栈的字符*/
    cout << "请输入栈的大小:";                                                    /*其实没有什么意义,并没有分配对应空间*/
    cin >> size;
    LinkedStack<char> stack;                                                    /*LinkedStack是一个模板类,需要给它传一个类型*/

    while( select != 5 )
     {
        cout << "\n\t\t\t************操作菜单*****************\n";
        cout << "\t\t\t\t1 入栈\n";
        cout << "\t\t\t\t2 出栈\n";
        cout << "\t\t\t\t3 取栈顶元素\n";
        cout << "\t\t\t\t4 栈中元素个数\n";
        cout << "\t\t\t\t5 退出\n";
        cout << "\t\t\t************请选择序号*****************\n";

        cin >> select;                                                            /*输入菜单选择*/
        switch(select)
        {
            case 1:
                cout << "请输入一个字符串并以<.>结束.\n";
                cin >> s;
                while(s != '.')                                                   
                {
                    stack.Push(s);                                                /*将输入的每一个字符入栈*/
                    cin >> s;
                }
                break;
            case 2:
                cout << "请输入出栈字符数:\n";
                cin >> number;
                cout << "\n出栈元素依次为:\n";
                for(i = 0;i < number; i++)
                {
                    if ( stack.Pop( temp))
                   cout << temp << " ";
                }
                cout << "\n";
                break;
         case 3:
             if (!stack.GetTop( temp))
             {
                 cout << "栈空."<< endl;
             }
             else
             {
                 cout << "栈顶元素为:\n" << temp;
             }
             break;
         case 4:            
             cout<<"栈中元素个数为:\n" << stack.getSize();
             break;
         case 5:
             break;
        }
     }
     cout << "谢谢使用\n";
}
图片附件: 游客没有浏览图片的权限,请 登录注册

 
2010-11-24 10:35
快速回复:C++这个程序为什么会这样
数据加载中...
 
   



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

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