4
我试图编译在VC下面的代码++ 2010:C++继承 - 用不同的参数类型相同的方法名
class Base
{
public:
std::wstring GetString(unsigned id) const
{
return L"base";
}
};
class Derived : public Base
{
public:
std::wstring GetString(const std::wstring& id) const
{
return L"derived";
}
};
int wmain(int argc, wchar_t* argv[])
{
Derived d;
d.GetString(1);
}
我的理解是派生将有两种方法:
std::wstring GetString(unsigned id) const
std::wstring GetString(const std::wstring& id) const
所以我的代码应该成功编译。但Visual C++ 2010报告如下错误:
test.cpp(32): error C2664: 'Derived::GetString' : cannot convert parameter 1 from 'int' to 'const std::wstring &'
Reason: cannot convert from 'int' to 'const std::wstring'
No constructor could take the source type, or constructor overload resolution was ambiguous
我在做什么错?当我以这种方式使用代码时,代码很完美:
Derived d;
Base base = d;
base.GetString(1);
或者当两个变体的GetString被定义在同一个类中时。
任何想法?我想避免显式类型化。
+1此外,您可以手动选择方法:`d.base :: GetString(1)`,但是这具有禁用动态分派的令人讨厌的副作用(如果成员函数是`virtual`,而不是案例) – 2011-12-14 21:53:20