【问题标题】:Overloading with similar conversions重载类似的转换
【发布时间】:2011-11-11 12:49:17
【问题描述】:

鉴于这两个功能:

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: 'AX::Base::Log::logMessage' : 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

【问题讨论】:

  • 您使用的是什么版本的编译器?这似乎是可变参数模板的绝佳案例
  • @sehe 我很想使用它,但我不能。编译器是 MSVS 2008。哦,除此之外,禁止在此 .dll 中使用模板。
  • 不确定如何解决这个问题,但link 可能会为您指明正确的方向。
  • @Carl 谢谢,但我在发布我的问题之前确实搜索了谷歌和 SO。
  • 鉴于这两个函数,编译器应该明确调用第二个函数,因为第一个函数不能被调用;第三个和第四个参数都不能转换为目标类型。所以有些事情你没有告诉我们。

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


【解决方案1】:

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

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

第二个参数可以是intunsigned int。 您必须进行显式强制转换才能使其工作。

例如:

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

【讨论】:

  • 这正是我正在寻找的答案。非常感谢。
  • 那么,让我建议速记方法:logMessage(LOG_TRACE, 0u, 0, "Teststring 2");(现场观看:ideone.com/LlCPh
猜你喜欢
  • 2011-07-29
  • 1970-01-01
  • 2017-09-16
  • 2015-06-02
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多