Я изучаю c ++ и пытаюсь реализовать шаблон моста, когда это происходит, у меня есть файл реализации с конструкторами:
SystemImpl::SystemImpl() {
this->name = "";
this->value = 0.0;
this->maxValue = DBL_MAX;
}
SystemImpl::SystemImpl(const SystemImpl& sys) {
this->name = sys.name;
this->value = sys.value;
this->maxValue = sys.maxValue;
}
А теперь я создаю интерфейс, который использует эту реализацию, где imps — мой указатель на класс реализации:
System::System() {
imps = new SystemImpl();
}
System::System(const System& sys) {
imps = new SystemImpl(sys);
}
Первый конструктор работает нормально, но второй, это конструктор копирования, показывает
нет соответствующей функции для вызова ‘SystemImpl :: SystemImpl (const System&)»
В чем дело?
За imps = new SystemImpl(sys);
Компилятор жалуется, что SystemImpl
не имеет конструктор, принимающий System
как его параметр.
Вы могли бы хотеть
System::System(const System& sys) {
imps = new SystemImpl(*sys.imps);
}
Других решений пока нет …