Я пытаюсь создать конструктор в подклассе, который будет вызывать конструкторы суперкласса.Вот код.
Я объявил три класса, как это:
class Sub1 {
private:
std::vector<MainClass> subvar_1;
public:
Sub1(int);
};
Sub1::Sub1(int size) : subvar_1(size) { }
_____________________________________
class Sub2 {
private:
std::vector<MainClass> subvar_2;
public:
Sub2(int);
};
Sub2::Sub2(int size) : subvar_2(size) { }
_____________________________________
class Sub3 {
private:
std::vector<std::vector<MainClass>> subvar_3;
public:
Sub3(std::vector<int>&);
};
Sub3::Sub3(std::vector<int>& size) {
subvar_3.reserve(size.size());
for (const int clmns : size)
subvar_3.emplace_back(std::vector<MainClass>(clmns));
}
Где MainClass определяется следующим образом:
class MainClass {
private:
int row;
int cln;
public:
MainClass();
};
MainClass::MainClass() {
row = rand();
cln = rand();
}
После всех этихбыло объявлено, мне нужно поместить все это в мастер-класс, который по иронии судьбы противоположен:
class MasterClass : public Sub1, Sub2, Sub3 {
public:
MasterClass(int, int, std::vector<int>&);
};
Это приводит к ошибке.Ошибка говорит о невозможности найти конструкторы Sub1 (), Sub2 () и Sub3 ().Конечно, их нет, они не предназначены для этого.Эта ошибка возникает, когда я запускаю:
MasterClass::MasterClass(int a, int b, std::vector<int>& c) :
Sub1(a), Sub2(b), Sub3(c) { }
команда.
Я компилирую код, используя:
g++ MainClass.cpp Sub1.cpp Sub2.cpp Sub3.cpp MasterClass.cpp
команда.
Можетты помогаешь мне почему?Как обойти эту ошибку?
Я хотел бы сделать следующее:
MainClass::MainClass (int a, int b, std::vector<int>& c) {
call constructor Sub1(a);
call constructor Sub2(b);
call constructor Sub3(c);
}
Я верю в MasterClass, который мне понадобится:
private:
Sub1 sub1;
Sub2 sub2;
Sub3 sub3;
, гдеЯ назначу результат конструирования объектов, расширяющих класс, в котором я пытаюсь вызвать конструктор?
Возможно ли даже в C ++ сделать это (использовать конструктор класса, который будет вызывать конструктор суперкласса)?
Если нет, есть ли способ обойти проблему, кроме как сохранить ту же структуру?