首页 > 解决方案 > 二进制“=”:未找到采用右手操作数的运算符(或没有可接受的对话)

问题描述

我收到了我在标题中提到的错误,特别是我正在重载运算符'='的代码部分。'=' 似乎可以独立工作,但是当我将 '=' 运算符与 '+' 运算符结合使用时,事情变得混乱

主要.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;
};

标签: c++classoopoperator-keyword

解决方案


返回的临时对象

(SubString + SubString)

不能绑定到左值引用 - MyString::operator=(MyString &String)

复制赋值运算符应通过const Lvalue reference获取其参数:

MyString::operator=(const MyString &String)

推荐阅读