-5

C のコードを C++ 言語に変換しようとすると、エラーが発生しますが、問題の原因がわかりません。

ここにソースコードがあります: http://pastebin.com/PnKvgNsR

エラーメッセージは次のとおりです。

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

g++4.7.1 でコンパイル (c++11 標準を含む)。

4

2 に答える 2

2

RabQavSystemヘッダーでは、名前空間で 2 つの関数を宣言します。

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) {
    ^^^^^^^^^^^^^^
}
于 2012-09-25T13:27:33.670 に答える
2

cpp ファイルで、dateTimeXXX 関数の定義に名前空間 RabQavSystem を指定します。

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

int RabQavSystem::dateTimeToMinutes(DateTime datetime)
{
    ...
}
于 2012-09-25T13:17:15.397 に答える