【发布时间】:2017-08-20 12:52:04
【问题描述】:
我一直在尝试编写此 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;
}
【问题讨论】:
-
在初始化
concat对象时,您使用ob[i](ip)。为此,您需要一个函数调用运算符(即operator()(string const&)在您的concat类型上。您可能想编写ob[i] = concat(ip)或ob[i] = ip(因为std::string的构造函数是隐式的,这种方法应该有效,也)。另外,总是在使用之前检查您的输入是否成功:if (std::cin >> ip) { ... } -
我确实尝试使用第二种方法进行更改,将 ob[i](ip) 更改为 ob[i] = concat(ip) 以及 ob[i]= ip。它执行没有错误,但在我输入后,程序崩溃了。
标签: c++ string class operator-overloading