【发布时间】:2020-07-13 15:07:17
【问题描述】:
在编译时显示sme error,当它返回添加对象的结果时,就像使用删除函数constexpr Player::Player(const Player&)一样。
#include <bits/stdc++.h>
using namespace std;
class Player
{
char* name;
int num;
public:
Player(char* str = nullptr, int n = -1)
: name{str}
, num{n}
{
if (str != nullptr)
{
name = new char[strlen(str) + 1];
strcpy(name, str);
str = nullptr;
}
}
Player& operator=(const Player& temp)
{
delete[] this->name;
this->name = new char[strlen(temp.name) + 1];
strcpy(this->name, temp.name);
this->num = temp.num;
}
Player operator+(const Player& temp);
};
Player Player::operator+(const Player& temp)
{
char* str = new char[strlen(name) + strlen(temp.name) + 1];
strcpy(str, name);
strcat(str, temp.name);
int n = num + temp.num;
Player result{str, n};
delete[] str;
return result;
}
int main()
{
Player p1{"abc", 11};
Player p2{" xyz", 9};
Player p3;
p3 = p1 + p2;
}
【问题讨论】:
-
Can't reproduce 我可以看到你的代码中有很多问题,但不是那个。
-
(1) 如果您想要轻松的生活,请将
char* name;替换为std::string name;。 (2) 然后可以使用=default语法重新引入复制构造函数;事实上,您甚至可能不需要自己定义构造函数。 -
Fyi..
Player& operator=(const Player& temp)实际上 return 是什么?查看函数的主体。看到什么……不见了?
标签: c++ class copy-constructor deleted-functions default-copy-constructor