C++ 不能在if语句-c+;中使用void func将字符串直接转换为大写+;
我有以下无效函数:C++ 不能在if语句-c+;中使用void func将字符串直接转换为大写+;,c++,c++11,C++,C++11,我有以下无效函数: void ToUppercase(std::string & data) { transform(data.begin(), data.end(), data.begin(), (int(*)(int))toupper); } 如果我使用这样的if语句: if (ToUppercase(str).find("AAA") != string::npos) // Do something; 它向我显示错误“表达式必须是类类型”。为什么我不能在if语句中直接使用
void ToUppercase(std::string & data)
{
transform(data.begin(), data.end(), data.begin(), (int(*)(int))toupper);
}
如果我使用这样的if语句:
if (ToUppercase(str).find("AAA") != string::npos) // Do something;
它向我显示错误“表达式必须是类类型”。为什么我不能在if语句中直接使用void func。不知何故,从ToUppercase func返回值对我来说是不可行的 ToUppercase(str)
正如您所声明的,属于void
类型。不能在void上调用成员访问操作符(
)
如果希望像这样链接调用,还可以返回传递的引用
std::string & ToUppercase(std::string & data)
{
transform(data.begin(), data.end(), data.begin(), (int(*)(int))toupper);
return data;
}
如果您出于某种原因坚持返回void
,您唯一有效的选择是:
ToUUppercase(str);
if(str.find("AAA") != std::string::npos)
{
}
ToUppercase(str)
正如您所声明的,属于void
类型。不能在void上调用成员访问操作符(
)
如果希望像这样链接调用,还可以返回传递的引用
std::string & ToUppercase(std::string & data)
{
transform(data.begin(), data.end(), data.begin(), (int(*)(int))toupper);
return data;
}
如果您出于某种原因坚持返回void
,您唯一有效的选择是:
ToUUppercase(str);
if(str.find("AAA") != std::string::npos)
{
}
find()
是std::string
类的成员方法,但返回的是void
。改革代码以返回std::string
,以便可以对返回值调用find()
。find()
是std::string
类的成员方法,但您返回的是void
。改革代码以返回std::string
,以便可以对返回值调用find()
。如果ToUppercase
确实无法返回新字符串,可以尝试以下操作:
ToUppercase(str);
if (str.find("AAA") != string::npos)
{
..
}
如果您的
ToUppercase
确实无法返回新字符串,您可以尝试以下操作:
ToUppercase(str);
if (str.find("AAA") != string::npos)
{
..
}
问问自己:
ToUppercase(str)
返回什么?我可以对返回的类型调用find(“AAA”)
吗?不,我正在比较find func和npo。您正在尝试对void
调用find
方法。这没有意义有什么方法可以做到这一点吗?再一次问你自己:ToUppercase(str)
返回什么?我可以对返回的类型调用find(“AAA”)
吗?不,我正在比较find func和npo。您正在尝试对void
调用find
方法。这没有任何意义有任何方法可以做到这一点吗?再次相关:改进:泛型std::find
可能比std::string::find
快(请参阅的注释部分)改进:泛型std::find
可能比std::string::find
快(请参阅的注释部分)