标题:本人在学习C++类的时候遇到这个问题,这段代码执行不了总是有错误怎么破~
只看楼主
yuruilee
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-2-4
结帖率:100%
已结贴  问题点数:5 回复次数:6 
本人在学习C++类的时候遇到这个问题,这段代码执行不了总是有错误怎么破~
#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();
}
搜索更多相关主题的帖子: include public 
2015-02-04 18:44
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:5 
cout<<pName()<<endl;没有这个成员函数,不是成员变量吗?
2015-02-04 19:10
yuruilee
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-2-4
得分:0 
回复 2楼 天使梦魔
没有那个括号,主要是strcpy出了问题,还有Name obj1("NoName")总是提示 ISO C++11 does not allow conversion from string literal to 'char *'
2015-02-04 19:51
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:0 
没看到有什么问题啊
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系列编译器写的,你自己要用到其他标准上要自己改一下
2015-02-04 22:55
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:0 
没看到有什么问题啊
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系列编译器写的,你自己要用到其他标准上要自己改一下
2015-02-04 22:55
yuruilee
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-2-4
得分:0 
回复 5楼 天使梦魔
谢谢,解决了
2015-02-04 23:23
一只垃圾政
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-5-24
得分:0 
回复 4楼 天使梦魔
大哥,你还在吗,有事情请教你
2017-05-24 13:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-441767-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.193349 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved