继承的operator =不工作?

use*_*342 0 c++ compiler-errors operator-overloading

operator=在结构上重载EqualTestBase,并operator=采用与构造结构不同的参数.

struct EqualTestBase
{
 EqualTestBase(int one) {}

 EqualTestBase& operator=(std::string two)
 {
  //stuff

  return *this;
 }
};
Run Code Online (Sandbox Code Playgroud)

它在基类上工作正常.但是从它派生的trival结构EqualTestDerived,就像它没有operator=成员函数一样.

struct EqualTestDerived : public EqualTestBase
{
 EqualTestDerived(int one) : EqualTestBase(one) {}
};

void test()
{
 EqualTestBase basetest(0);
 basetest = "test"; //this is fine, compiles

 EqualTestDerived derivedtest(0);
 derivedtest = "test"; //this does not compile, says there is no constructor that takes type const char[5]
}
Run Code Online (Sandbox Code Playgroud)

我是否必须重新定义operator=所有派生结构,或者有没有办法自动传递该功能?

Mik*_*our 5

派生类具有隐式声明的复制赋值运算符,该运算符隐藏在基类中声明的运算符.您可以使用using它将其纳入范围:

struct EqualTestDerived : public EqualTestBase
{
    EqualTestDerived(int one) : EqualTestBase(one) {}
    using EqualTestBase::operator=;
};
Run Code Online (Sandbox Code Playgroud)