使用类似的转换进行重载

时间:2011-11-11 12:49:17

标签: c++ type-conversion overloading visual-studio

鉴于这两个功能:

bool logMessage(LogType_E, unsigned int, int, const char *, ...); //!< Log message with parameters

bool logMessage(LogType_E, int, const char *, ...); //!< Logs message with domain of Log class

并致电其中一人:

A3D_LOG_INSTANCE.logMessage(Log::LOG_INFO, 0, "Number = %d", 10);
  

错误1错误C2666:&#39; AX :: Base :: Log :: logMessage&#39; :2次重载   类似   转换o:\ AX_FusRecAlg \ src \ base \ test.u \ LogSimpleFileTest \ LogSimpleFileTest.cpp 50 AX.Base.LogSimpleFileTest

有人可以用简单的英语向我解释为什么会出现这种错误并可能提供另一种选择吗?我不明白在char *之前有3个参数的函数如何与有两个参数的函数匹配?!

感谢。

修改:

因为有些人想知道我隐藏信息: 无法更改功能签名。没有模板可以使用。只是解释为什么会出现这种错误就足够了。

enum LogType_E {
        LOG_ERROR       = 0,            //!< error
        LOG_WARNING     = 1,            //!< warning
        LOG_SUCCESS     = 2,            //!< success
        LOG_INFO        = 3,            //!< info
        LOG_TRACE       = 4,            //!< trace message if tracing is enabled
        LOG_TRACE1      = 5,            //!< trace level 1
        LOG_TRACE2      = 6,            //!< trace level 2
        LOG_TRACE3      = 7,            //!< trace level 3
        LOG_TRACE4      = 8             //!< trace level 4
    };


bool logMessage(LogType_E, unsigned int, int, const char *, ...)
{
    return true;
}

bool logMessage(LogType_E, int, const char *, ...)
{
    return true;
}

int main()
{
    logMessage(LOG_TRACE, 0, 0, "Teststring 2");
    return 0;
}

将上面的代码复制并粘贴到.cpp文件中并在此处运行或click

1 个答案:

答案 0 :(得分:1)

这是正常行为。从你的例子:

logMessage(LOG_TRACE, 0, 0, "Teststring 2");

第二个参数可以是intunsigned int。 你必须进行明确的演员才能使其发挥作用。

例如:

logMessage(LOG_TRACE, (unsigned int)0, 0, "Teststring 2");