Cześć,
kolejny dzień zmagań z dziedziczeniem wielokrotnym.
Mam 4 klasy w tym jedną wirtualną. W każdej klasie są odpowiednie konstruktory. W ostatniej, która wirtualnie dziedziczy po 2, jest również konstruktor domyślny. Przy nim program pokazuje błąd: "Only constructor take members initializers".
Jak naprawić kod żeby program działał i w funkcji main można było stworzyć obiekt bez podania żadnych argumentów?
Podałem wszystkie wymagane z ćwiczenia konstruktory. Konstruktor wirtualny jest zdefiniowany w osobnym pliku, razem z resztą metod, których tu nie zamieściłem.
Problem pojawia się w tej linijce:
highfnik() : abstr_emp(),manager(),fink() {};
Tu cały kod.
#ifndef CLASS_H_INCLUDED
#define CLASS_H_INCLUDED
#include <string>
#include <iostream>
class abstr_emp
{
private:
std::string fname;
std::string lname;
std::string job;
public:
abstr_emp():fname("default"),lname("default"),job("default") {};
abstr_emp(const std::string & fn, const std::string & ln, const std::string & j):
fname(fn),lname(ln),job(j) {};
virtual ~abstr_emp() = 0;
[...]
};
class employee : public abstr_emp
{
public:
employee(): abstr_emp() {};
employee(const std::string & fn,const std::string & ln, const std::string & j):abstr_emp(fn,ln,j) {};
[....]
};
class manager : virtual public abstr_emp
{
private:
int inchargeof;
public:
manager(): abstr_emp() ,inchargeof(0) {};
manager(const std::string & fn,const std::string & ln,
const std::string & j, int ico = 0):abstr_emp(fn,ln,j),inchargeof(ico) {};
manager(const abstr_emp & e, int ico):abstr_emp(e),inchargeof(ico) {};
manager(const manager & m):abstr_emp(m) {};
[....]
};
class fink : virtual public abstr_emp
{
private:
std::string reportsto;
public:
fink():abstr_emp(), reportsto("default") {}
fink(const std::string & fn,const std::string & ln, const std::string & j, const std::string & rpo):
abstr_emp(fn,ln,j),reportsto(rpo) {};
fink(const abstr_emp & e, const std::string & rpo): abstr_emp(e),reportsto(rpo) {};
fink (const fink & e):abstr_emp(e) {};
[....]
};
class highfink : public manager, public fink
{
public:
highfnik() : abstr_emp(),manager(),fink() {}; // tutaj wystepuje błąd
highfink(const std::string & fn,const std::string & ln, const std::string & j,
const std::string & rpo,int ico):
abstr_emp(fn,ln,j),fink(fn,ln,j,rpo),manager(fn,ln,j,ico) {};
highfink(const abstr_emp & e,const std::string & rpo,int ico):
abstr_emp(e),fink(e,rpo),manager(e,ico) {};
highfink(const fink & f, int ico): abstr_emp(f),manager(f,ico),fink(f) {}
highfink(const manager & m,const std::string & rpo): abstr_emp(m),manager(m),fink(m,rpo) {};
highfink(const highfink & h):abstr_emp(h),fink(h),manager(h) {};
[....]
};
#endif // CLASS_H_INCLUDED