Я получаю error C2082: redefinition of formal parameter 'rval'
в этом коде при попытке явно вызвать базовую копию ctor:
#include <iostream>
using namespace std;
class Base
{
public:
Base(const Base& rhs){ cout << "base copy ctor" << endl; }
};
class Derived : public Base
{
public:
Derived(const Derived& rval) { Base(rval) ; cout << "derived copy ctor" << endl; }
// error C2082: redefinition of formal parameter 'rval'
};
int main()
{
Derived a;
Derived y = a; // invoke copy ctor
cin.ignore();
return 0;
}
Однако, если сделать это так:
Derived(const Derived& rval) { Base::Base(rval) ; cout << "derived copy ctor" << endl; }
тогда все в порядке.
Почему я спрашиваю это?
согласно ответам на StackOwerflow
Мне не нужно использовать оператор ::
для доступа к базовой копии ctor,
так почему я получаю эту ошибку?
Кстати: я использую Visual Studio 2010.
У меня есть еще один вопрос:
Нужно ли вызывать конструктор перемещения base в определяемом пользователем конструкторе перемещения производного класса?