VS 2005到VS 2012:我现在需要演员吗?

时间:2015-06-10 13:12:25

标签: c++ visual-studio-2012 visual-studio-2005 typedef

好的,我一整天都在寻找解决方法,所以这是我最后的希望。

我已将此解决方案从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中 - 所以任何帮助或提示都将不胜感激。

0 个答案:

没有答案