复制构造函数小问. 书上的程序编译错误!

hionceshine 2005-08-26 04:45:46
#ifndef STRING_H
#define STRING_H

class String
{
public:
String( String const & );
~String();
private:
char *ptrChars;
};

#endif


#include <cstring>
#include "string.h"

String::String(String const &str )
{
ptrChars = new char[std::strlen(str.ptrChars) + 1 ];
std::strcpy( ptrchars, str.ptrChars );
}

String :: ~String()
{
delete [] ptrChars;
}


#include "string.h"

int
main()
{
String firstString("C++");
String copyofFirstString( firstString );
}


错误提示如下:
f:\learningc++\复制构造函数\main.cpp(6) : error C2664: “String::String” : 不能将参数 1 从“const char [4]”转换为“const String &”
原因如下: 无法从“const char [4]”转换为“const String”
无构造函数可以接受源类型,或构造函数重载决策不明确
string.cpp
f:\learningc++\复制构造函数\string.cpp(7) : error C2065: “ptrchars” : 未声明的标识符
正在生成代码...

自己还是不很明白...请各位赐教.


...全文
105 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
oosky2004 2005-08-27
  • 打赏
  • 举报
回复
aasxn(sxn)
对编译器的不同,还不是很理解,望详细讲解。
oosky2004 2005-08-27
  • 打赏
  • 举报
回复
不过 “void GetString()const;”这个const有什么作用啊
-----------------------------------
这句是调试的时候加的一句。测试其他用途的
aasxn 2005-08-26
  • 打赏
  • 举报
回复
(1)大小写不对
(2)没有构造函数

oosky2004(oosky) 写的很好,不过要注意编译器不同。

不过 “void GetString()const;”这个const有什么作用啊
dog0883 2005-08-26
  • 打赏
  • 举报
回复
针对第一个错误,应该有构造函数
String::String(const char* str)
{
ptrChars = new char[std::strlen(str) + 1 ];
std::strcpy( ptrChars, str);
}

第二个错误,把

ptrchars改成ptrChars
oosky2004 2005-08-26
  • 打赏
  • 举报
回复
f:\learningc++\复制构造函数\string.cpp(7) : error C2065: “ptrchars” : 未声明的标识符
你这个连大小写都错误了。
qfeng_zhao 2005-08-26
  • 打赏
  • 举报
回复
缺少把char*转化为String的构造函数
oosky2004 2005-08-26
  • 打赏
  • 举报
回复
main()
{
String firstString("C++"); ///你这句有问题。这里传的是一个指针。应该还要加一个构造函数:String::Sting(const char *){}
String copyofFirstString( firstString );
}
oosky2004 2005-08-26
  • 打赏
  • 举报
回复
参照我写的String类。
class String
{
public:

String(const char *s =NULL);
String(const String& other);
void GetString()const;
String& operator=(String&);
~String();
private:
char* data;

};
//---------------------------------------------------------
String::String(const String& other)
{
data = new char[strlen(other.data) + 1];
strcpy(data, other.data);
}
//-----------------------------------------------
String::String(const char* str){
if (str==NULL) {
data = new char[1];
*data = '\0';
}
else{
data = new char[strlen(str) + 1];
strcpy(data, str);
}
}
//---------------------------------------------------
String &String::operator=(String& s){
if (&s!=this)
{
delete[] data;
data = new char[strlen(s.data) + 1];
strcpy(data, s.data);
}
return *this;
}
//----------------------------------------------
void String::GetString()const{
cout<<data<<endl;
}
//----------------------------------------------
String::~String(){
delete[] data;
}
//-----------------------------------------------
oosky2004 2005-08-26
  • 打赏
  • 举报
回复
#include <cstring>
你包这个头文件进来又什么用呢?
lemon520 2005-08-26
  • 打赏
  • 举报
回复
没有构造函数.
String::String(const char* str):ptrChars(new char[std::strlen(str.ptrChars) + 1])
{
std::strcpy( ptrchars, str);
}

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧