Я пытаюсь скомпилировать старый код, который должен был работать с наследованием C++. Я фиксируя вещи на некоторое время, но я сдался с этой ошибкой:Является ли конструктор вызываемым при передаче объектов в качестве аргумента?
class Operation{
public:
char *op;
//Operation();
Operation(char op[]){
(*this).op = op;
}
};
class Param : Operation{
public:
int value;
Param(char op[], int value) : Operation(op){
(*this).op=op;
(*this).value=value;
}
int getValue(){
return this->value;
}
};
class MyBase{
public:
int valuea;
int valueb;
Operation operation;
MyBase(int a, int b, Operation* op){
valuea=a;
valueb=b;
operation=*op;
}
Operation* getSum(){};
Operation* getRest(){};
};
class MyExtend : public MyBase{
public:
Param* getSum(){
Param pam=new Param(this->valuea+this->valueb,"add");
return pam;
}
Param* getRest(){
Param pam=new Param(this->valuea-this->valueb,"rest");
return pam;
}
};
class Exec{
public int static main(args[] params){
MyExtend ext=new MyExtend(6,4);
cout << ext.getSum().getValue() << endl;
cout << ext.getRest().getValue() << endl;
return 0;
}
};
Я фокусирование на ошибках в
MyBase (ИНТ а, б, ИНТ Операция * ор) {
что:
ошибка: нет функции согласования для вызова «Operation :: операции()»
Я удивлен, потому что это выглядит как его проверка для конструктора по умолчанию Oper ция. Если я перегружаю конструктор по умолчанию, он работает, но я не понимаю, почему. Не важно, передаю ли я операцию по значению или ссылке. Можете ли вы дать мне несколько намеков на эту функциональность? Я не смог найти последовательный ответ. Пожалуйста, проигнорируйте следующие ошибки, когда я работаю над ними.
Все самое лучшее.
Понял. Мощный ответ. Большое спасибо. – Alex
+1, но я не думаю, что сам конструктор копирования будет улучшением. 'Operation' - это базовый класс' Param', и OP почти наверняка захочет сохранить объекты 'Param' в' operation'. Вероятно, умный тип указателя будет лучшим выбором, который не обязательно должен делать копию '* op'. – hvd
Я использую Code :: Blocks как свою IDE, потому что он предоставляет много компиляторов, но во время выполнения я получаю: mingw32-g ++. Exe -o bin \ Release \ Tests.exe obj \ Release \ Exec.o -s c:/программные файлы/кодовые блоки/mingw/bin /../ lib/gcc/mingw32/4.7.1 /../../../ libmingw32.a (main.o): main.c :(. text.startup + 0xa7): неопределенная ссылка на 'WinMain @ 16 ' collect2.exe: ошибка: ld возвращен 1 статус выхода Процесс завершен со статусом 1 (0 минут, 0 секунд) 1 ошибка, 0 предупреждений (0 минут, 0 секунд) – Alex