bład przy dziedziczeniu

0

panowie, już mi mózg nie pracuje.

#include <iostream>
using namespace std;

class A
{
protected:
    int AA;
    int BB;
public:
    A (int a, int b)
    {
        AA= a; BB= b;
    }

};

class B : public A
{
private:
    int CC;
public:
    B (int a, int b, int c)
    {
        AA= a; BB= b; CC= c;
    }

};

int main ()
{
    A a(2,4);
    return 0;
} 

co tu jest nie tak?

E:\CodeBlocks\PROJEKTY\SZKOLA_OB\forp.cpp||In constructor 'B::B(int, int, int)':|
E:\CodeBlocks\PROJEKTY\SZKOLA_OB\forp.cpp|23|error: no matching function for call to 'A::A()'|
E:\CodeBlocks\PROJEKTY\SZKOLA_OB\forp.cpp|10|note: candidates are: A::A(int, int)|
E:\CodeBlocks\PROJEKTY\SZKOLA_OB\forp.cpp|5|note: A::A(const A&)|
||=== Build finished: 1 errors, 0 warnings ===|

0

Konstruktor klasy B musi wywołać konstruktor swojej klasy bazowej. Nie podałeś żadnego na liście inicjalizacyjnej w konstruktorze klasy B dlatego wywoływany jest konstruktor bezargumentowy (domyślny), ale w klasie A takiego nie ma. Albo go zrób albo wywołaj odpowiedni z konstruktora B.

0

Przed wykonaniem konstruktora klasy pochodnej wykonywany jest automatycznie domyślny konstruktor klasy bazowej jeżeli nie zostało to sprecyzowane. W tym wypadku go nie ma, ten problem możesz elegancko rozwiązać korzystając z listy inicjalizacyjnej, bez potrzeby zmiany klasy A.

0

dodałem konstruktor bezparametrowy do klasy A, i wszystko śmiga,

1 użytkowników online, w tym zalogowanych: 0, gości: 1