Я смущен этой ситуацией, и googling не дал мне ответа. В основном у меня есть следующий простой код, который не компилируется:
#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::
, я прошу версию функции static
. Естественно, этот код до сих пор не компилируется, если я удаляю функцию static
a()
, потому что A::a()
не является допустимым синтаксисом для вызова не static
a()
.
Спасибо за любой комментарий!