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

帮忙看看这个程序的错误

袁广川 发布于 2017-03-28 21:29, 2138 次点击
#include <iostream>
#include <string.h>
using namespace std;
class Girl{
    private :
        string*name;
        int age;
    public :
        Girl(string*n,int d)
        {
            name=new string[strlen(n)+1];
            name=n;
            age=d;
        }
        friend void disp(Girl&);
        ~Girl()
        {
            delete []name;
        }
};
void disp(Girl&x)
{
    cout<<"The girl's name is "<<x.name<<",age is "<<x.age<<"."<<endl;
}
int main()
{
    string name;
    cin>>name;
    int age;
    cin>>age;
    Girl g1(name,age);
    disp(g1);
    return 0;
}
4 回复
#2
rjsp2017-03-29 08:36
如果是编译失败,应该贴出编译错误,比如
error C2664: 'strlen' : cannot convert parameter 1 from 'std::string *' to 'const char *'
实在是太瞎搞了,比如
name=new string[strlen(n)+1];
name=n;
根本无法猜出你想干什么,只能重写一个
程序代码:
#include <iostream>
#include <string>

class Girl
{
public:
    Girl() : name_(), age_()
    {
    }
    Girl( const std::string& name, unsigned age ) : name_(name), age_(age)
    {
    }

private:
    std::string name_;
    unsigned age_;

    friend std::istream& operator>>( std::istream& is, Girl& girl );
    friend std::ostream& operator<<( std::ostream& os, const Girl& girl );
};

using namespace std;

std::istream& operator>>( std::istream& is, Girl& girl )
{
    return is >> girl.name_ >> girl.age_;
}

std::ostream& operator<<( std::ostream& os, const Girl& girl )
{
    return os << "The girl's name is " << girl.name_ << ", age is " << girl.age_ << ".";
}

int main( void )
{
    Girl girl;
    cin >> girl;
    cout << girl << endl;

    return 0;
}
#3
袁广川2017-03-30 18:01
回复 2楼 rjsp
#include <iostream>
#include <string.h>
using namespace std;
class Girl{
    private :
        char * name;
        int age;
    public :
        Girl(char * n,int d)
        {
            name=new char[strlen(n)+1];
            strcpy(name,n);
            age=d;
        }
        friend void disp(Girl&x);
        ~Girl()
        {
            delete []name;
        }
};
void disp(Girl&x)
{
    cout<<"The girl's name is "<<x.name<<",age is "<<x.age<<"."<<endl;
}
int main()
{
    char * name1;
    cin>>name1;
    int age;
    cin>>age;
    Girl g1(name1,age);
    disp(g1);
    return 0;
}


//这个错误在哪里?
#4
yangfrancis2017-03-30 18:17
char * name1;
改成 char name1[20];//长度根据自己需要指定
#5
rjsp2017-03-30 21:48
除了这个明显的错误,还缺拷贝构造和赋值函数,否则会重复释放内存。
当然,最大的问题是一点儿都不C++,四不像
1