c ++编译错误:重载'<function_name>(char *&amp;)'的调用是不明确的</function_name>

时间:2012-09-25 13:01:27

标签: c++ ambiguous

我正在尝试将C中的代码转换为C ++语言,但我得到了一个错误,但我不知道 问题的根源是什么。

这是源代码:http://pastebin.com/PnKvgNsR

错误消息是:

call of overloaded ‘dateTimeToMinutes(char*&)’ is ambiguous

使用g ++ 4.7.1编译(包括c ++ 11标准)。

2 个答案:

答案 0 :(得分:2)

在cpp文件中,在dateTimeXXX函数的定义中指定命名空间RabQavSystem。

int RabQavSystem::dateTimeDifference(DateTime datetime1, DateTime datetime2) 
{
    ...
}

int RabQavSystem::dateTimeToMinutes(DateTime datetime)
{
    ...
}

答案 1 :(得分:1)

在标题中,您在RabQavSystem命名空间中声明了两个函数:

namespace RabQavSystem {
    int dateTimeToMinutes(DateTime datetime);
    int dateTimeDifference(DateTime datetime1, DateTime datetime2);
}

在源文件中,在全局命名空间中声明和定义新函数;这些不是标题中声明的函数的定义,而是不同命名空间中不同函数的定义:

int dateTimeDifference(DateTime datetime1, DateTime datetime2) {
    // ....
}

int dateTimeToMinutes(DateTime datetime) {
    // ....
}

然后using namespace RabQavSystem;将其他函数名称拉入全局名称空间,导致歧义。

要修复它,您需要在命名空间中定义函数,而不是全局命名空间:

int RabQavSystem::dateTimeDifference(DateTime datetime1, DateTime datetime2) {
    ^^^^^^^^^^^^^^
}

int RabQavSystem::dateTimeToMinutes(DateTime datetime) {
    ^^^^^^^^^^^^^^
}