C ++:不匹配调用'(concat)(std :: string&)'

时间:2017-08-20 12:52:05

标签: c++ string class operator-overloading

我一直在尝试编写这个C ++程序,以便在运算符(+ =)上使用运算符重载来连接用户输入的字符串。我已经定义了构造函数来初始化对象以及将字符串作为参数。但它仍然显示错误

  

错误:无法匹配'(concat)(std :: string&)' |

这里是3个文件的代码=> 的的main.cpp

#include <iostream>
#include "concat.h"
#include<string>
using namespace std;

int main()
{
concat ob[10];
concat result;
int i;
string ip;
cout<<"Enter the strings upto 10 in different lines.. \n";
for(i=0;i<(sizeof(ob)/sizeof(ob[0]));i++){
    cin>>ip;
    ob[i](ip);
}

while(i!=0){
    result += ob[i++];
}
cout<<result.input;
}

concat.h

#ifndef CONCAT_H
#define CONCAT_H
#include<string>
using namespace std;

class concat
{
public:
    string input;
    concat();
    concat(string ip);
    concat operator+=(concat );

};

#endif // CONCAT_H

concat.cpp

#include <iostream>
#include "concat.h"
#include<string>
using namespace std;

concat::concat(){
}
concat::concat(string ip)
:input(ip)
{
}
concat concat::operator+=(concat ipObj){
    this->input += ipObj.input;
    return *this;
}

1 个答案:

答案 0 :(得分:1)

这就是你的concat类原型应该是这样的:

class concat
{
public:
    string input;
    concat() = default;
    concat& operator+=(const concat&);

    // assignment operator
    concat& operator=(const string& str) {  
        input = str;
        return *this;
    }
};

然后使用ob[i] = ip;代替ob[i](ip)

此外,您的程序崩溃是因为您写了result += ob[i++];而不是result += ob[--i];