可能重复:
Class method and variable with same name, compile error in C++ not in Java?
当我的类成员名称和成员函数名称相同时,G ++编译器会抱怨。似乎每当变量名称恰好与函数名称相同时,编译器就会抱怨。
在Java中,情况并非如此。我只是想知道为什么G ++编译器无法区分变量名和函数名,因为函数名总是带有一对括号。
答案 0 :(得分:8)
struct Callable
{
void operator()() const { }
};
struct Test
{
void Call() { }
Callable Call;
};
int main()
{
Test x;
x.Call(); // To which 'Call' does this refer?
}
答案 1 :(得分:3)
这有两个原因:
operator()
()
)在第一种情况下,variable()
会做什么?在第二种情况下,编译器必须通过操作的返回类型来确定正确的操作 - C ++不允许出于各种原因。