【发布时间】:2011-12-14 21:44:25
【问题描述】:
我正在尝试在 VC++ 2010 中编译以下代码:
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);
}
我的理解是 Derived 会有两种方法:
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 的两个变体都定义在同一个类中时。
有什么想法吗?我想避免显式类型转换。
【问题讨论】:
标签: c++ visual-studio-2010 visual-c++ inheritance