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

本人在学习C++类的时候遇到这个问题,这段代码执行不了总是有错误怎么破~

yuruilee 发布于 2015-02-04 18:44, 3607 次点击
#include<iostream>
#include<cstring>
using namespace std;
class Name
{public:
    Name(char*pn);
    Name(const Name &obj);
    ~Name();
    void setName(char *);
    void showName();
    protected:
    char *pName;
    long size;
};
Name::Name(char *pn)
{cout<<"Coustructing"<<pn<<endl;
    pName=new char[strlen(pn)+1];
    if(pName!=0) strcpy_s(pName,strlen(pn)+1,pn);
    size=strlen(pn);
}
Name::Name(const Name &obj)
{cout<<"copying"<<obj.pName<<"into its own block\n";
    pName=new char[strlen(obj.pName)+1];
    if(pName!=0)
        strcpy_s(pName,strlen(obj.pName)+1,obj.pName);
    size=obj.size;
}
Name::~Name()
{cout<<"Destructing"<<pName<<endl;
    pName[0]='\0';
    delete []pName;
    pName=NULL;
    size=0;
}
void Name::setName(char *pn)
{delete []pName;
    pName=new char[strlen(pn)+1];
    if(pName!=0) strcpy_s(pName,strlen(pn)+1,pn);
    size=strlen(pn);
}
void Name::showName()
{cout<<pName()<<endl;
}
int main()
{Name obj1("NoName");
    Name obj2=obj1;
    obj1.showName();
    obj2.showName();
    obj1.setName("sundondpo");
    obj2.setName("DuFu");
    obj1.showName();
    obj2.showName();
}
6 回复
#2
天使梦魔2015-02-04 19:10
cout<<pName()<<endl;没有这个成员函数,不是成员变量吗?
#3
yuruilee2015-02-04 19:51
回复 2楼 天使梦魔
没有那个括号,主要是strcpy出了问题,还有Name obj1("NoName")总是提示 ISO C++11 does not allow conversion from string literal to 'char *'
#4
天使梦魔2015-02-04 22:55
没看到有什么问题啊
strcpy_s是vs编译器的变种,在vs里属于安全类型
ISO C++11 does not allow conversion from string literal to 'char *'
提示的是不允许这样转换。

你用的是mingw?
第一个问题把_s去掉,g++里没有这个版本的函数
第二个问题可以声明为数组比如Name(char pn[]);或者在你构造里把pn实例了。g++不允许这样使用字符串


你的代码在vs上没问题,这个代码就是给vs系列编译器写的,你自己要用到其他标准上要自己改一下
#5
天使梦魔2015-02-04 22:55
没看到有什么问题啊
strcpy_s是vs编译器的变种,在vs里属于安全类型
ISO C++11 does not allow conversion from string literal to 'char *'
提示的是不允许这样转换。

你用的是mingw?
第一个问题把_s去掉,g++里没有这个版本的函数
第二个问题可以声明为数组比如Name(char pn[]);或者在你构造里把pn实例了。g++不允许这样使用字符串


你的代码在vs上没问题,这个代码就是给vs系列编译器写的,你自己要用到其他标准上要自己改一下
#6
yuruilee2015-02-04 23:23
回复 5楼 天使梦魔
谢谢,解决了
#7
一只垃圾政2017-05-24 13:12
回复 4楼 天使梦魔
大哥,你还在吗,有事情请教你
1