注册 登录
编程论坛 C++教室

求助,这个程序哪里错了??

guowei3758 发布于 2010-05-08 19:17, 832 次点击
#include<iostream>
#include<cstdlib>
using namespace std;
class date
{
private:
    int year;
    int month;
    int day;
public:
    date(int y,int m,int d)
    {
        cout<<"构造date"<<endl;
    }
    inline void copy(int y,int m,int d)
    {
        year=y;
        month=m;
        day=d;
    }
    inline void print2()
    {
        cout<<year<<"."<<month<<"."<<day<<endl;
    }
    ~date()
    {
    }
};
class people
{
private:
    long int number;
    char sex;
    char id[20];
    int y,m,d;
public:
    date b1(0,0,0);
    people()
    {
            number=0;sex='\0';
            y=m=d=0;
    }
    inline void xinxi()
    {
            cout<<"please input the number:";
            cin>>number;
            cout<<"please input the sex:(m/f)";
            cin>>sex;
            cout<<"please input the id:";
            cin>>id;
    }
    inline void birth()
    {
        cout<<"the birthday"<<endl;
        cout<<"please input the year:";
        cin>>y;
        cout<<"please input the month:";
        cin>>m;
        cout<<"please input the day:";
        cin>>d;
        b1.copy(y,m,d);
    }
    inline void print1()
    {
        cout<<number<<endl
            <<sex<<endl
            <<id<<endl;
        b1.print2();
    }
    ~people()
    {
    }
};
int main()
{
    int i,n;
    system("color 9e");
    people p1[1000];
    cout<<"How many people?";
    cin>>n;
    for(i=0;i<n;i++)
    {
        p1[i].xinxi();
        p1[i].birth();
    }
    for(i=0;i<n;i++)
    {
        p1[i].print1();
    }
    return 0;
}
哪里错了呢??
8 回复
#2
ltyjyufo2010-05-08 21:19
  我编译时连cl.exe都是错的,我的一直用着好好的啊。。。
#3
shiyuehai2010-05-08 21:25
我知道怎么改,在定义date构造函数的时候给参数默认值,然后下面date b1(0,0,0);改成date b1就可以了
,原因不是很清楚,因为也是刚接触c++不久,还在学习中,不知道是不是因为嵌套中无法显式调用构造函数还是其他原因呢,等下看看其他高手怎么说,我也学习下
#4
lintaoyn2010-05-08 21:43
类里面的数据成员不能自己初始化或者给它赋值,只有在构造函数里才能对数据成员进行初始化或者赋值
#5
lintaoyn2010-05-08 21:47
回复 3楼 shiyuehai
本来每个类都会提供一个不带参数的构造函数。但是只要我们自己写了一个构造函数(不管有没有带参数),那个默认提供给我们的构造函数就会没有掉。
#6
shiyuehai2010-05-08 22:32
回复 5楼 lintaoyn
呵呵。谢谢你,我知道系统会给我们提供默认的构造函数,但我知道lz的意图就是如果我们不输入就默认日期为0 0 0,所以我才给他个带默认值的构造函数。。。我刚刚也是想说你那个原因出来,就是不知道怎么表达,怕说错了,我还处于初级阶段,希望以后多多指教
#7
西玉2010-05-10 11:52
b1.copy(y,m,d);      b1.print2();     未定义

system("color 9e");   should have a prototype
#8
2010-05-10 14:06
我用2005实验了一下,他提示date b1(0,0,0);中b1为常量。我理解是,编译器把你写的这句话认为是给对象b1赋初值了。但是类中不可以给其成员变量赋初值的。所以提示错误。我也是刚学,不太明白,自己根据编译器提示想的。
#9
kekin2010-05-13 22:00
回复 3楼 shiyuehai
貌似你说的改了那个不行哟,相当于没有赋初始值,会报错哟~~
改了后好像可以了,就是定义构造函数在类外,同时赋初始值。
代码上传在这里,感兴趣可以看看!
只有本站会员才能查看附件,请 登录
1