no matching function for call to...

0
#ifndef Kwadrat_cpp
#define Kwadrat_cpp
#include <iostream>
#include "Figury.cpp"
#include "Czworokat.cpp"

using namespace std;

class Kwadrat : public Czworokat, public Figury {
private:
    double bok1, bok2, bok3, bok4, kat;

    Kwadrat(double b1, double b2, double b3, double b4, double k)
    {
      bok1 = b1;
        bok2 = b2;
        bok3 = b3;
        bok4 = b4;
        kat = k;

        if (bok1 <= 0 || bok2 <= 0 || bok3 <= 0 || bok4 <= 0) {
            cout << "Podano niepoparawne wartości dł. boków kwadratu !" << endl;
        }
        else if (bok1 != bok2 || bok1 != bok3 || bok1 != bok4) {
            cout << "Kwadrat ma wszystkie boki tej samej długości!" << endl;
        }

        else if (kat != 90) {
            cout << "Kwadrat posiada kąty o rozmiarze 90 stopni!" << endl;
        }
        else {
            cout << "Pole kwadratu wynosi: " << Figury::oblicz_pole_kwadratu(bok1) << endl;
            cout << "Obwód kwadratu wynosi: " << Figury::oblicz_obwod_kwadratu(bok1) << endl;
        }
    }
};

#endif
#ifndef Czworokat_cpp
#define Czworokat_cpp
#include <iostream>
#include "Figury.cpp"

using namespace std;

class Czworokat : public Figury
{

private:
    double bok1, bok2, bok3, bok4, kat;


public:
    Czworokat(double b1, double b2, double b3, double b4, double k)
    {
        bok1 = b1;
        bok2 = b2;
        bok3 = b3;
        bok4 = b4;
        kat = k;

        if (kat <= 0 || kat >= 360) {
            cout << "To nie będzie czworokątem! " << endl;
        }
    }
};

#endif
Kwadrat.cpp: In constructor ‘Kwadrat::Kwadrat(double, double, double, double, double)’:
Kwadrat.cpp:14:5: error: no matching function for call to ‘Czworokat::Czworokat()’
     {
Wyciąg z konsoli

Nie wiem co to za błąd

2

Czemu Kwadrat dwukrotnie dziedziczy z Figury (raz przez Czworokat)?

Czworokat nie ma domyślnego konstruktora, a ty go niejawnie używasz w konstruktorze Kwadrat. Dodaj listę inicjalizacyjną:

    Kwadrat(double b1, double b2, double b3, double b4, double k): Czworokat(b1, b2, b3, b4, k)
    {
0

Czworokąt nie ma konstruktora domyślnego, który Kwadrat mógłby wywołać, kolego. Wywołaj jawnie konstruktor z 5 argumentami double.

0

Tak swoją drogą, po co dublujesz zmienne w kwadrat? Powinieneś zamiast tego użyć tych z Czworokat (które wobec tego powinny mieć akcesory lub być protected zamiast private)

0

czyli wystarczyłoby napisać:

Kwadrat(double b1, double b2, double b3, double b4, double k): Czworokat(b1, b2, b3, b4, k)
    {
        if (bok1 <= 0 || bok2 <= 0 || bok3 <= 0 || bok4 <= 0) {
            cout << "Podano niepoparawne wartości dł. boków kwadratu !" << endl;
        }
        else if (bok1 != bok2 || bok1 != bok3 || bok1 != bok4) {
            cout << "Kwadrat ma wszystkie boki tej samej długości!" << endl;
        }
 
        else if (kat != 90) {
            cout << "Kwadrat posiada kąty o rozmiarze 90 stopni!" << endl;
        }
        else {
            cout << "Pole kwadratu wynosi: " << Figury::oblicz_pole_kwadratu(bok1) << endl;
            cout << "Obwód kwadratu wynosi: " << Figury::oblicz_obwod_kwadratu(bok1) << endl;
        }
    }
};

tylko zmienić private na protected w czworokat ?

1

Tak.

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