3个重载都不能转换所有参数类型(在MFC / C ++项目中)

时间:2015-03-06 21:15:44

标签: c++ mfc

我从我下载的另一个项目中复制了一些代码(编译得很好)并在我自己的项目中编译相同的代码(一个名为player.cpp的文件)时得到编译器错误消息:

错误1错误C2665:'MATExceptions :: MATExceptions':3个重载中没有一个可以转换所有参数类型c:\ users \ daniel \ documents \ visual studio 2012 \ projects \ mytest1 \ mytest1 \ player.cpp 137 1 TEST1

在player.cpp中的这一行发生错误:

        EXCEP(DirectSoundErr::GetErrDesc(hres), _T("Player::CreateDS DirectSoundCreate"));

以下是EXCEP和GetErrDesc的定义:

#define EXCEP(/*const wchar_t * */ desc, /*const wchar_t * */ from) throw( MATExceptions(__LINE__,  _T(__FILE__), 0, from, desc) );

CComBSTR DirectSoundErr::GetErrDesc(HRESULT hres)
{
switch(hres)
{
    case DSERR_ALLOCATED : 
        return _T("The request failed because resources, such as a 
        priority level, were already in use by another caller.");               
...
    default : return _T("Unknown error");
}
}

我不知道有什么不同(因为我没有更改源文件player.cpp)。可能是因为我的项目中的编译器设置与原始设置不同(我将如何检查)?

2 个答案:

答案 0 :(得分:0)

我将EXCEP定义更改为以下内容:

#define EXCEP(desc, from) throw(MATExceptions(__LINE__, (wchar_t *)(__FILE__), 0, (wchar_t *)from, (wchar_t *)desc));

...并改变了来自:

的电话
EXCEP(DirectSoundErr::GetErrDesc(hres), _T("Player::CreateDS DirectSoundCreate"));

为:

EXCEP(DirectSoundErr::GetErrDesc(hres), "Player::CreateDS DirectSoundCreate");

这可以接受吗?

答案 1 :(得分:0)

可以通过在项目中定义这些来杀死原始的“新”(我想是因为Visual Studio 2015):

__PLACEMENT_NEW_INLINE __PLACEMENT_VEC_NEW_INLINE

但是一旦它们消失了,它们就消失了。现在,您需要确保包含特定于项目的头文件,以重新定义它们。