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
快(请参阅的注释部分)