gpt4 book ai didi

c++继承 - 具有不同参数类型的相同方法名称

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:25 27 4
gpt4 key购买 nike

我正在尝试在 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 的两个变体在同一个类中定义时。

有什么想法吗?我想避免显式类型转换。

最佳答案

Derived::GetString 隐藏了 Base::GetString* 要解决此问题,请执行以下操作:

class Derived : public Base
{
public:
using Base::GetString;

std::wstring GetString(const std::wstring& id) const
{
return L"derived";
}
};


* Scott Meyers 在“Effective C++”的第 50 章中解释了相当模糊的原因。

另见 http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.9 .

关于c++继承 - 具有不同参数类型的相同方法名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8512088/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com