定义 UnaryPredicate 时类型为 void 的非法操作数
Illegal operand of type void when defining UnaryPredicate
我正在尝试将 std::partition 与自定义 UnaryPredicate 一起使用。
void Rank(vector< pair<double, string> >& pairs) const
{
partition(pairs.begin(), pairs.end(), [](const pair<double, string>& a) { isnan(a.first); });
}
执行此操作时,我收到来自 Visual Studio 2015 的以下错误:
- 错误 C2297“&&”:非法,右操作数具有类型
'void' 映像 c:\program files (x86)\microsoft visual studio
14.0\vc\include\algorithm1839
- 错误 C2171“!”:'void' Imaging c:\program files (x86)\microsoft visual studio 类型的操作数非法
14.0\vc\include\algorithm1844
- 错误 C2297“&&”:非法,右操作数的类型为 'void' Imaging c:\program files (x86)\microsoft
visual studio14.0\vc\include\algorithm1844
然而以下没有问题:
bool pairIsNan(const pair<double, string>& a)
{
return isnan(a.first);
}
partition(pairs.begin(), pairs.end(), pairIsNan);
谁能说明第一组代码有什么问题以及如何解决?
你的 lambda 没有 return 任何东西,它对应的函数实际上是这样的:
void pairIsNan(const pair<double, string>& a)
{
// Discard the result of the isnan function
(void) isnan(a.first);
}
要使其工作,您需要 return lambda 中 isnan
函数调用的结果:
partition(pairs.begin(), pairs.end(), [](const pair<double, string>& a)
{
// Return the result
return isnan(a.first);
});
我正在尝试将 std::partition 与自定义 UnaryPredicate 一起使用。
void Rank(vector< pair<double, string> >& pairs) const
{
partition(pairs.begin(), pairs.end(), [](const pair<double, string>& a) { isnan(a.first); });
}
执行此操作时,我收到来自 Visual Studio 2015 的以下错误:
- 错误 C2297“&&”:非法,右操作数具有类型 'void' 映像 c:\program files (x86)\microsoft visual studio 14.0\vc\include\algorithm1839
- 错误 C2171“!”:'void' Imaging c:\program files (x86)\microsoft visual studio 类型的操作数非法 14.0\vc\include\algorithm1844
- 错误 C2297“&&”:非法,右操作数的类型为 'void' Imaging c:\program files (x86)\microsoft visual studio14.0\vc\include\algorithm1844
然而以下没有问题:
bool pairIsNan(const pair<double, string>& a)
{
return isnan(a.first);
}
partition(pairs.begin(), pairs.end(), pairIsNan);
谁能说明第一组代码有什么问题以及如何解决?
你的 lambda 没有 return 任何东西,它对应的函数实际上是这样的:
void pairIsNan(const pair<double, string>& a)
{
// Discard the result of the isnan function
(void) isnan(a.first);
}
要使其工作,您需要 return lambda 中 isnan
函数调用的结果:
partition(pairs.begin(), pairs.end(), [](const pair<double, string>& a)
{
// Return the result
return isnan(a.first);
});