鉴于这两个功能:
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。
答案 0 :(得分:1)
这是正常行为。从你的例子:
logMessage(LOG_TRACE, 0, 0, "Teststring 2");
第二个参数可以是int
和unsigned int
。
你必须进行明确的演员才能使其发挥作用。
例如:
logMessage(LOG_TRACE, (unsigned int)0, 0, "Teststring 2");