将char *转换为我的自定义类(MyString)对象时出错

时间:2018-11-10 15:50:36

标签: c++ oop operator-overloading

我正在尝试使用库编写我自己的字符串类以准备考试。但是我遇到了这样的错误

main.cpp:9:22: error: no match for ‘operator+’ (operand types are ‘const
 char [5]’ and ‘MyString’)
 MyString c = "Hola" + b;

我的主要是这样的。工作文件,然后“ Hola”和b更改位置。

MyString b("Mundo\n");
MyString c = "Hola" + b;

我认为它没有调用那里的构造函数。 我班上有这些课。

char * _str
int _length

我的构造函数。

MyString::MyString(const char * str){

    int length = 0;
    for(char c = str[0]; c != '\0' ; c++)
        ++length;

    _length = length;
    _str = new char[length+1];

    strcpy(_str,str);

}

我的+超载

const MyString MyString::operator+(const MyString& mS) const{

    char * tempChar = new char[_length + mS._length];
    MyString tempStr(tempChar);
    delete[] tempChar;
    strcpy(tempStr._str,_str);
    strcat(tempStr._str,mS._str);

    return tempStr;
}

编辑:我通过将operator +设置为朋友函数来解决它,但我想知道为什么

2 个答案:

答案 0 :(得分:0)

您的问题出在过载功能上

const MyString MyString::operator+(const MyString& mS) const;

它将const MyString&作为参数,但是您要为其提供一个常量char数组(字符串文字)。

如果您更改

MyString c = "Hola" + b;

进入

MyString c = MyString{"Hola"} + b;

它将编译而不会出错。

答案 1 :(得分:0)

写的时候

 MyString b{"Mundo\n"};
 MyString c = b + "Hola";

字符串文字将发送给您的operator +函数参数,并使用“ Holla”创建MyString对象(您可以在构造函数中编写文本来对其进行测试。)

此外,当您未编写朋友函数并编写

 MyString b{"Mundo\n"};
 MyString c = "Holla" + b; 

编译器将搜索第一个参数为const char *且找不到的函数(并且没有匹配错误显示)。这就是编写好友功能的原因。 希望你能理解原因