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

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” : 未声明的标识符
正在生成代码...

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


...全文
145 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);
}
内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。

65,211

社区成员

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

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