Меня смущает эта ситуация, и поиск в Google не дал мне ответа. В основном у меня есть следующий простой код, который не компилируется:
#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 сообщает, что вызов A :: a ()
в main ()
неоднозначен с обеими версиями a ()
подходящих кандидатов. Компилятор Apple LLVM 3.0 компилируется без ошибок.
Почему gcc не понимает, какую функцию я хочу вызвать? Я думал, что это очевидно, если указать a ()
с помощью A ::
I ' m запрашивает статическую
версию функции. Естественно, этот код все равно не компилируется, если я удалю статическую
функцию a ()
, потому что A :: a ()
не является допустимым синтаксисом для вызова не static
a ()
.
Спасибо за любой комментарий!