我对这种情况感到困惑,通过谷歌搜索也没有找到答案。基本上,我有以下简单代码,但它无法编译:
#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()
都是合法的候选函数。而苹果公司的 LLVM 编译器 3.0 则能够正常编译。
为什么 GCC 对我想要调用的函数感到困惑?我认为通过使用 A::
限定符来表示我要调用的是静态版本的函数是很明显的。如果我删除了 static
函数 a()
,那么这段代码自然仍无法编译,因为使用 A::a()
来调用非静态的 a()
不是有效的语法。
感谢任何评论!