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

【求助】头晕啊!指针

TND 发布于 2009-10-14 23:00, 889 次点击
用指针数组表示姓名,地址,邮政编码。有很多问题,帮我改改,大虾!
#include<iostream>
#include<string>
using namespace std;
class person
{
private:
    string *p[3];
    static int m;
public:
    person(string *a);
    ~person();
    void setname(string *name);
    void show();
};
int person::m=1;
person::person(string *a)
{
    cout<<"creat ""<<m<<"" person!"<<endl;
    for(int i=0;i<3;i++)
    {
        p[i]=new string[strlen(a[i])+1];
        strcpy(p[i],a[i]);
    m++;
}
person::~person()
{
    cout<<"delete"<<m-1<<"person!"<<endl;
}
void person::setname(string name)
{
    p[0]=name;
}
void person::show()
{
    cout<<"姓名:"<<person.p[0]<<endl;
    cout<<"地址:"<<person.p[1]<<endl;
    cout<<"邮政编码:"<<person.p[2]<<endl;
}
void main()
{
    string *s[3]={"我我我","江西于都","10002'};
    person p1(s);
    p1.show();
    char name;
    cin>>name;
    setname(name);
    p1.show();
}


  
10 回复
#2
zodiac2072009-10-15 09:08
int person::m=1
你这样直接给类成员赋值是不行的

只有用类声明了对象,才能对对象中的成员赋值的
#3
flyingcloude2009-10-15 10:33
strlen,strcpy这些都是针对c-串的,既然用了string,那取长度就用length,赋值直接用=就可以了
#4
guang1420302009-10-15 17:56
顶一下!
#5
TND2009-10-15 21:00
回复2楼
因为m是静态变量,这里没错啊!
#6
TND2009-10-15 21:05
回复3楼
不怎么懂??
我把strlen改成length
strcpy改=
还是在那里报错!
#7
qlc002009-10-15 23:32
你在开始的时候定义string *p[3],相当于定义的是一个含有三个string类型的指针,而你在cout<<"姓名:"<<person.p[0]<<endl; cout<<"地址:"<<person.p[1]<<endl; cout<<"邮政编码:"<<person.p[2]<<endl,这三句里面就不能使用啊!出现的错误中有一条是不能强制转换类型。
#8
TND2009-10-16 19:37
回复7楼
对不起啊,我基础较差,还是不怎么懂?
能帮我把错误的改正过来,最好用红色标记
#9
flyingcloude2009-10-17 00:00
回复 6楼 TND
#include<iostream>
#include<string>
using namespace std;
class person
{
private:
    string p[3];
    static int m;
public:
    person(string *a);
    ~person();
    void setname(string name);
    void show();
};
int person::m=1;
person::person(string *a)
{
    cout<<"creat ""<<m<<"" person!"<<endl;
    for(int i=0;i<3;i++)
    {
        p[i]=a[i];//new string[strlen(a[i])+1];
 //       strcpy(p[i],a[i]);
    }
       m++;
}
person::~person()
{
    cout<<"delete"<<m-1<<"person!"<<endl;
}
void person::setname(string name)
{
    p[0]=name;
}
void person::show()
{
    cout<<"姓名:"<<p[0]<<endl;
    cout<<"地址:"<<p[1]<<endl;
    cout<<"邮政编码:"<<p[2]<<endl;
}
int main()
{
    string s[3]={"我我我","江西于都","10002"};
    person p1(s);
    p1.show();
    string name;
    cin>>name;
    p1.setname(name);
    p1.show();
}


#10
blueskiner2009-10-17 09:07
如果成员出现了指针变量,最好重载构造函数
#11
明次2009-10-17 19:36
一看到指针我也晕了
1