我有一个代码,由于错误我无法编译,代码"error: no matching function for call to 'asd'"
中的if (asd( checkline[i], alphabet)==true)
。我不知道我做错了什么,因为asd()
是在exname()
之前定义的。感谢您的帮助。
#include <string>
#include <iostream>
const std::string alphabet="йцукенгшщзхъфывапролджэёячсмитьбю";
using namespace std;
bool asd(string two, string one)
{
size_t pos=one.find(two);
if(pos!= string::npos)
{
return true;
}
return false;
}
string exname(string checkline)
{
string newstr;
for (int i = 0; i < checkline.length(); ++i)
{
if (asd( checkline[i], alphabet)==true)
{
/* code */
}
}
return newstr;
}
答案 0 :(得分:4)
您将char
中的checkline[i]
视为字符串
bool asd(string two, string one)
// ^^^^^ make this char
{
//.....
}
答案 1 :(得分:0)
编译器正在寻找bool asd(char, string)
,您只定义了bool asd(string, string)
。您需要修改asd
的定义或更改您的调用方式。
答案 2 :(得分:0)
在函数调用中
if (asd( checkline[i], alphabet)==true)
第一个参数的类型为char
,而函数的定义方式使其第一个参数的类型为std::string
。类char
中的对象没有隐式转换为类std::string
中类型为std::string
的对象。
因此,编译器会发出错误,因为它找不到名为asd
的函数,该函数的第一个参数类型为char
..
答案 3 :(得分:0)
对函数调用asd函数的第一个参数可以更改为char,如前所述,或可以使用 substr 来使用checkline创建仅包含相关字符的字符串的方法。我做的其他更改:1)在&#34之后定义const字符串;使用命名空间std&#34;,2)从const字符串的前面删除不必要的std :: 3)是int()cast checkline.length( )消除不必要的警告信息:
#include <iostream>
#include <string>
using namespace std;
const string alphabet="йцукенгшщзхъфывапролджэёячсмитьбю";
bool asd(string two, string one)
{
size_t pos=one.find(two);
if(pos != string::npos)
{
return true;
}
return false;
}
string exname(string checkline)
{
string newstr;
for (int i = 0; i < int(checkline.length()); ++i)
{
if (asd( checkline.substr(i, 1), alphabet) == true)
{
/* code */
}
}
return newstr;
}