运算符重载,提示未声明。

我是菜鸟999 2014-12-29 11:55:47
请问这段代码要怎么声明,我的声明不对。也可能是别的原因,总之,请大神不吝赐教,万分感谢!
public:
CMyString& operator=(const CMyString& str);

#include <intrin.h>
#include <iostream>
class CMyString
{
public:
CMyString(char* pData=nullptr);
CMyString(const CMyString& str);
~CMyString(void);

void print(CMyString& str1)
{
std::cout<<str1.m_pData<<std::endl;
}
protected:
private:
char* m_pData;

public:
CMyString& operator=(const CMyString& str);
};

CMyString& CMyString::operator=(const CMyString& str)
{
if (this!=&str)
{
CMyString strTmp(str);
char* m_pTmp = str.m_pData;
strTmp.m_pData = m_pData;
m_pData = m_pTmp;
}
return *this;
}

void main()
{
CMyString m_str="ceshi";
CMyString strTmp2;
CMyString strTmp3;
strTmp2=m_str;
strTmp3.print(strTmp2);
getchar();
}
...全文
199 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjx8613 2015-01-06
  • 打赏
  • 举报
回复
// CCTest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <intrin.h> #include <iostream> class CMyString { public: CMyString(char* pData=nullptr); CMyString(const CMyString& str); ~CMyString(void); void print(CMyString& str1) { std::cout<<str1.m_pData<<std::endl; } protected: private: char* m_pData; public: CMyString& operator=(const CMyString& str); }; CMyString::CMyString(char* pData){ this->m_pData = new char[200]; if(pData != NULL){ memcpy(this->m_pData,pData,strlen(pData)); } } CMyString::~CMyString(){ delete m_pData; } CMyString& CMyString::operator=(const CMyString& str) { this->m_pData = new char[200]; this->m_pData = str.m_pData; return *this; } void main() { CMyString m_str="ceshi"; CMyString strTmp2; CMyString strTmp3; strTmp2=m_str; strTmp3.print(strTmp2); getchar(); } 你这个用到的m_pData未申请任何存储空间,指向有问题。所以给你稍加改动了一些
lm_whales 2015-01-01
  • 打赏
  • 举报
回复
CMyString(char* pData=nullptr);也一样没实现 这两个函数都是需要的
lm_whales 2015-01-01
  • 打赏
  • 举报
回复
CMyString(const CMyString& str); 没实现啊 这个 operator = 是否有问题 关键就和这个拷贝构造函数有关
pengzhixi 2014-12-29
  • 打赏
  • 举报
回复
看错了,无视吧
Saleayas 2014-12-29
  • 打赏
  • 举报
回复
if ((void const *)this!=(void const *)&str)
我是菜鸟999 2014-12-29
  • 打赏
  • 举报
回复
引用 1 楼 pengzhixi 的回复:
看你operator=的实现吧,问题就在实现里面
还是不明白啊,能说具体点吗。这段代码是书上的,只不过书上就写了一下函数的实现和构造函数。我想写个main函数调用一下试试的。
pengzhixi 2014-12-29
  • 打赏
  • 举报
回复
看你operator=的实现吧,问题就在实现里面
我是菜鸟999 2014-12-29
  • 打赏
  • 举报
回复
引用 3 楼 Saleayas 的回复:
if ((void const *)this!=(void const *)&str)
不对啊。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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