我很困惑,为什么我无法访问void func(int i)
,任何人都可以帮助我?
当然,这只是一个帮助您轻松理解我的问题的演示。它真正的代码是巨大的,我希望Base和Child中的成员函数都可用。
输出始终是 **
double
2
**
struct base
{
void func(int i)
{
cout << "int" << endl;
cout << i << endl;
}
};
struct child : base
{
void func(double d)
{
cout << "double" << endl;
cout << d << endl;
}
};
child c;
c.func((int)2);
答案 0 :(得分:3)
因为child::func
隐藏了 base::func
。
您需要通过将名称放在范围中来使其在派生类中可见:
struct child : base
{
using base::func;
void func(double d)
{
cout << "double" << endl;
cout << d << endl;
}
};
或通过在呼叫站点限定名称来明确调用基本版本:
c.base::func(2);
答案 1 :(得分:1)
从int到double的隐式转换掩盖了实际问题。如果将基类func参数类型从int更改为string:
struct base
{
void func(string i)
{
cout << "string" << endl;
cout << i << endl;
}
};
然后您会收到以下错误以使其更清晰:
func.cpp: In function `int main()':
func.cpp:27: error: no matching function for call to `child::func(const char[13])'
func.cpp:17: note: candidates are: void child::func(double)
你可以看到它只有child :: func的可见性而不是base :: func