私はこの状況で混乱しており、グーグルが私に答えを与えていませんでした。基本的に私はコンパイルされません。次の簡単なコードがあります。これをコンパイルするにはオーバーロードされた静的関数へのあいまいな呼び出し
#include <iostream>
class A
{
public:
int a(int c = 0) { return 1; }
static int a() { return 2; }
};
int main()
{
std::cout << A::a() << std::endl;
return 0;
}
を、GCC 4.2はmain()
でA::a()
への呼び出しがa()
有効な候補者の両方のバージョンで曖昧であると言います。 AppleのLLVMコンパイラ3.0はエラーなしでコンパイルされます。
gccはどの機能を呼び出したいのですが、なぜ混乱していますか? a()
をA::
とすると、私はそれが機能のバージョンstatic
を求めていることは明らかでした。 A::a()
は、static
a()
を呼び出すための有効な構文ではないため、当然、static
関数a()
を削除すると、このコードはコンパイルされません。
ありがとうございました!
私はすばらしいGoogle検索:「静的で非静的なメンバー関数の名前解決C++」は別のSOの質問を思いつきました:http://stackoverflow.com/questions/5365689/c-overload-static-function -with-non-static-function – Bingo
私のgoogle-fuは私に失敗しました... – fang