好的,我一整天都在寻找解决方法,所以这是我最后的希望。
我已将此解决方案从VS 2005移植到VS 2012,因此如果某些设置或编译器发生更改,可能会有所不同。
我有一个typedef,然后在模板中的结构中使用:
typedef bool (__cdecl *tBreakPointer)(const double&, const double&);
template <typename _T>
struct s_OptParameter
{
tBreakPointer pAbortPointer;
};
这些是给我错误的行(switch语句中带有'='的行):
OptPara.nID = static_cast<unsigned int>(m_ParameterList->IndexOf(Item));
OptPara.nScale = Item->Scale;
switch (Item->Abort)
{
case GeneticAbortType::Greater:
OptPara.pAbortPointer = checkGreater;
break;
}
checkGreater定义如下:
bool checkGreater(const double& nAct, const double& nBreak)
{
return (nAct > nBreak);
}
现在这是我得到的错误:
error C2440: '=' : cannot convert from 'bool (__stdcall *)(const double &,const double &)' to 'tBreakPointer'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
所有常见的答案似乎都不符合我的问题,因为我的代码在VS 2005中没有问题,而且不在VS 2012中 - 所以任何帮助或提示都将不胜感激。