Я пытаюсь скомпилировать следующий код в 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 определены в одном классе.
Есть идеи? Я хотел бы избежать явного приведения типов.