我正在尝试使用库编写我自己的字符串类以准备考试。但是我遇到了这样的错误
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 +设置为朋友函数来解决它,但我想知道为什么
答案 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 *且找不到的函数(并且没有匹配错误显示)。这就是编写好友功能的原因。 希望你能理解原因