【发布时间】:2012-02-25 23:10:47
【问题描述】:
我对这种情况感到困惑,谷歌搜索并没有给我答案。基本上我有以下无法编译的简单代码:
#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 版本。当然,如果我删除了static 函数a(),这段代码仍然无法编译,因为A::a() 不是调用非static a() 的有效语法。
感谢您的任何评论!
【问题讨论】:
-
顺便说一句,我在谷歌上快速搜索:“静态和非静态成员函数 C++ 的名称解析”提出了另一个 SO 问题:stackoverflow.com/questions/5365689/…
-
哎呀,我的 google-fu 让我失望了……
标签: c++