派生类继承了operator =()没有匹配的函数

时间:2015-01-06 23:00:34

标签: c++ inheritance operator-keyword

给出以下代码:

#include <string>

using namespace std;

class Base
{
public:
    Base(int tagId, const string& value) : m_tagId(tagId), m_value(value) { }
    virtual ~Base() { }

    virtual string value() { return m_value; }

    virtual Base& operator=(const string& value)
    {
        m_value = value;
        return *this;
    }

    virtual Base& operator=(const Base& rhs)
    {
        if (this != &rhs)
        {
            m_tagId = rhs.m_tagId;
            m_value = rhs.m_value;
        }
        return *this;
    }

private:
    int m_tagId;
    string m_value;
};

class Derived : public Base
{
public:
    Derived(int tagId, const string& value) : Base(tagId, value) { }
    virtual ~Derived() { }
};

以下代码:

Derived a(0, "String A");
a.operator=("String B");    // aka: a = "String B";

给出以下编译错误:

error: no matching function for call to `Derived::operator=(const std::string&)'
note: candidates are: Derived& Derived::operator=(const Derived&)

试图理解为什么Base类中的赋值运算符带有一个const字符串&amp;无法识别参数(并且应该从Base类继承)。这里的目的是允许将字符串配置值上转换为Derived类配置值。

注意:派生类最终将包含更多功能,但出于此问题的目的,它除了从Base继承功能之外没有其他功能。

提前感谢您的帮助!

0 个答案:

没有答案