c++ - 二进制“=”:未找到采用右手操作数的运算符(或没有可接受的对话)
问题描述
我收到了我在标题中提到的错误,特别是我正在重载运算符'='的代码部分。'=' 似乎可以独立工作,但是当我将 '=' 运算符与 '+' 运算符结合使用时,事情变得混乱
主要.cpp:
#include "MyString.h"
#include <iostream>
int main() {
char String1[] = "abcdef";
MyString NewString(String1);
char String2[] = "cd";
MyString SubString(String2);
cout << NewString.GetStringLength() << endl;
cout << SubString.GetStringLength() << endl;
NewString = (SubString + SubString); // Here I get an error
cout << NewString.GetStringLength() << endl;
system("pause");
return 0;
}
类构造函数和运算符:
MyString::MyString() {
StringLength = 0;
Pointer = nullptr;
}
MyString::MyString(const char* String) {
for (int i = 0; String[i]; i++)
StringLength++;
Pointer = new char[StringLength + 1];
char *Source = (char *)String;
char *Destination = (char *)Pointer;
for (int i = 0; i < StringLength + 1; i++)
Destination[i] = Source[i];
}
MyString::MyString(int Length)
:Pointer(new char[Length + 1]), StringLength(Length) {
Pointer[Length] = 0;
MyString MyString::operator=(MyString &String) {
int BigLength;
int SmallLength;
this->StringLength > String.StringLength ?
BigLength = this->StringLength, SmallLength = String.StringLength :
BigLength = String.StringLength, SmallLength = this- >StringLength;
this->StringLength = String.StringLength;
for (int i = 0; i < SmallLength - 1; i++)
this->Pointer[i] = String.Pointer[i];
for (int i = SmallLength; i < BigLength - 1; i++)
this->Pointer[i] = 0;
return *this;
};
MyString MyString::operator+(MyString &String) {
MyString TempString(this->StringLength + String.StringLength);
for (int i = 0; i < this->StringLength; i++)
TempString.Pointer[i] = this->Pointer[i];
for (int i = 0; i < String.StringLength; i++)
TempString.Pointer[i + this->StringLength] = String.Pointer[i];
return TempString;
};
解决方案
返回的临时对象
(SubString + SubString)
不能绑定到左值引用 - MyString::operator=(MyString &String)
。
复制赋值运算符应通过const Lvalue reference获取其参数:
MyString::operator=(const MyString &String)
推荐阅读
- .net - 导出到Excel时如何根据条件给出标题?
- semantic-release - 语义释放是否有一个替换器来替换文件中的字符串?
- apache-kafka - kafka集群中的Kafka管理器配置问题
- dart - 如何禁用标签栏中的特定标签才能单击?
- java - 静态工厂是否适用于 C#?
- autodesk-forge - 使用 3rd 方云存储或本地存储时,Model Derivative API 将翻译的 .SVF 文件存储在哪里
- javascript - 用js将表格从html导出到excel(方向问题)
- r - 如何修复使用 spark-submit 提交 R 任务中出现的“错误:意外出现在”中
- javascript - 如何使用时刻 javascript 限制时间
- python - CMake 运行脚本