none
【2】 书本上的一个例子,然后编译出现了问题,求指教,谢谢 RRS feed

  • 问题

  • 下面我结合书本的操作要求、代码以及运行时的情况,麻烦大家帮忙看看哪里出错了。

    (1)创建项目。

    使用VC.NET创建一个“Win32控制台应用程序”,项目名为“UseClass2”。

    (2)添加类。

    打开“类视图”,右击UseClass2项目,选择“添加”,选择“类”,选择C++类,添加“Person”类。

    (3)修改Person类

    //Person.h文件
    #include "string"
    using namespace std;

    class Person
    {
    public:
    Person();
    Person(string xn,int n=0);
    Person(Person &someone);
    ~Person();
    void display()const;
    protected:
    string name;
    int friendcount;
    string * friendlist;

    };

    //Person.cpp文件
    #include "StdAfx.h"
    #include "Person.h"
    #include "iostream"
    using namespace std;

    Person::Person(){friendlist=NULL;}

    Person::Person(string xn,int n)
    {
    name=xn;
    cout<<"Welcome Person "<<name<<endl;
    friendcount=n;
    if(friendcount>0)
    {
    cout<<"You have "<<friendcount<<" friends.Who are they?"<<endl;
    string * p=friendlist=new string[n];
    while(n>0)
    {
    cin>>* p;
    p++,n--;
    }
    }
    else
    friendlist=NULL;
    }

    Person::Person(Person &someone)
    {
    name=someone.name;
    friendcount=someone.friendcount;
    cout<<"Welcome a dupliacated Person "<<name<<endl;
    if(friendcount>0)
    {
    int n=friendcount;
    cout<<"You have "<<friendcount<<" friends.Who are they?"<<endl;
    string *p=friendlist=new string[n];
    while(n>0)
    {
    cin>>* p;
    p++,n--;
    }
    }
    else
    friendlist=NULL;
    }

    Person::~Person()
    {
    cout<<"Bye~ "<<name<<endl;
    delete []friendlist;
    }

    void Person::display()const
    {
    cout<<"Hi~ "<<name<<endl;
    int n=friendcount;
    if(n<=0)
    cout<<"You have 0 friend."<<endl;
    else
    {
    cout<<"Your friends are: ";
    string *p=friendlist;
    while(n>0)
    {
    cout<<* p<<' ';
    p++,n--;
    }
    cout<<endl;
    }

    }

    (4)用上述方法添加“Chinese”类,注意它的基类要求是“Person”类。修改“Chinese”类,代码如下。

    //Chinese.h文件
    #include "person.h"

    class Chinese :
    public Person
    {
    public:
    Chinese(string xpet,string xn,int n=0);
    void display();
    ~Chinese();
    private:
    string Birthpet;       //新增数据成员生肖
    };

    //Chinese.cpp文件
    #include "StdAfx.h"
    #include "Chinese.h"
    #include <iostream>
    using namespace std;

    Chinese::Chinese(string xpet,string xn,int n):Person(xn,n)
    {
    Birthpet=xpet;
    cout<<"Welcome Again "<<name<<". You are Chinese"<<endl;
    }


    void Chinese::display()
    {
    Person::display();
    cout<<"You are a happy little "<<Birthpet<<endl;
    }


    Chinese::~Chinese()
    {
    cout<<"Bye~~ little "<<Birthpet<<endl;
    }

    (5)修改主文件UseClass2.cpp,代码如下

    #include "stdafx.h"
    #include "Person.h"
    #include "Chinese.h"

    void test()
    {
    Chinese c1("Tiger","Wang");
    c1.display();
    Chinese c2("Snake","Qian",1);
    c2.display();
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    test();
    return 0;
    }

    【最终结果】运行的时候,直到输入数据,仍然没事,但是,一按“回车键”就马上跳出程序,并且在“输出框”显示以下语句。

    “UseClass2.exe”: 已加载“D:\My Documents\Visual Studio 2005\Projects\UseClass2\debug\UseClass2.exe”,已加载符号。
    “UseClass2.exe”: 已加载“C:\Windows\System32\ntdll.dll”,未加载任何符号。
    “UseClass2.exe”: 已加载“C:\Windows\SysWOW64\kernel32.dll”,未加载任何符号。
    “UseClass2.exe”: 已加载“C:\Windows\SysWOW64\KernelBase.dll”,未加载任何符号。
    “UseClass2.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.vc80.debugcrt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_e4a70117006762dd\msvcr80d.dll”,已加载符号。
    “UseClass2.exe”: 已加载“C:\Windows\SysWOW64\msvcrt.dll”,未加载任何符号。
    “UseClass2.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.vc80.debugcrt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_e4a70117006762dd\msvcp80d.dll”,已加载符号。
    程序“[5280] UseClass2.exe: 本机”已退出,返回值为 0 (0x0)。

    2015年9月22日 8:50

答案

  • 你好,你的问题可能是你使用了调试模式,你可以采取下面的任意一种解决方法:

    1. 用CTRL+F5 代替F5,即点击调试--->开始执行(不调试)那个选项。

    2. 在main函数中加入system(“pause”);语句
    int _tmain(int argc, _TCHAR* argv[])
    {
     test();
     system("pause");
     return 0;
    }


    • 已编辑 chchlll 2015年9月23日 8:46
    • 已标记为答案 乐逍遥1a 2015年9月23日 12:34
    2015年9月23日 8:22

全部回复

  • 你好,你的问题可能是你使用了调试模式,你可以采取下面的任意一种解决方法:

    1. 用CTRL+F5 代替F5,即点击调试--->开始执行(不调试)那个选项。

    2. 在main函数中加入system(“pause”);语句
    int _tmain(int argc, _TCHAR* argv[])
    {
     test();
     system("pause");
     return 0;
    }


    • 已编辑 chchlll 2015年9月23日 8:46
    • 已标记为答案 乐逍遥1a 2015年9月23日 12:34
    2015年9月23日 8:22
  • 谢谢你!又是你,哈哈!两种方法都行,谢了!
    2015年9月23日 12:34