重载operator + for const char *

时间:2017-03-18 18:04:22

标签: c++ overloading

File

这就是我的函数的样子,这是我的main()

PString& PString::operator+(const PString &p) {
PString ps3;
ps3.rec = this->rec + p.rec;
return ps3;
}

这是我得到的错误信息

PString ps1("Ovo je neki text");
PString ps2("ovo je neki drugi text");
PString ps3(ps1);
ps1 = ps2;
PString ps4;
ps4 = ps1 + ps2;
cout << ps4 << endl;

这是我班上的事:

vezba.cpp:99:29: error: invalid operands of types ‘char*’ and ‘char* const’ to binary ‘operator+’
 ps3.rec = this->rec + p.rec;
                         ^
vezba.cpp:98:13: warning: reference to local variable ‘ps3’ returned [-Wreturn-local-addr]
 PString ps3;

好的,所以我将操作符+更改为此

class PString {
private:
char *rec;

现在我收到警告

PString& PString::operator+(const PString &p) {
PString ps4;
std::string(ps4.rec) = std::string(this->rec) + std::string(p.rec);
return ps4;
}

并且没有打印出来

2 个答案:

答案 0 :(得分:1)

Google it:“operator + const char”...... example

引用dlf:

  

operator+的rhs和lhs都是char*s。没有operator+的定义需要两个char*(事实上,该语言不允许您编写一个)。

编辑:您应该使用std::string ...

edit2:肯定吗?它微不足道......

#include <iostream>
#include <string>

int main()
{
    std::string ps1("Ovo je neki text");
    std::string ps2("ovo je neki drugi text");
    std::string ps3(ps1);
    ps1 = ps2;
    std::string ps4;
    ps4 = ps1 + ps2;
    std::cout << ps4 << std::endl;
    return 0;
}

On codepad

答案 1 :(得分:0)

使用+进行字符串连接的最简单方法是使用标准库std::string。如果您尝试自己实现,则需要为PString类重载+。内置char * s不允许您将它们与+连接起来。