Dlaczego element klasy "x" nie ma składowej "y"

0
#include "pch.h"
#include <iostream>
#include <string>
#include <conio.h>

using namespace std;

//PODSTAWOWA KLASA OKRET

class Okret
{
protected:
    string Nazwa;
    int Wypornosc;

public:
    Okret() : Nazwa("brak"), Wypornosc(0) {};
    Okret(string nazwa, int wypornosc) : Nazwa(nazwa), Wypornosc(wypornosc) {};

    string nazwa()
    {
        return Nazwa;
    };

    int wypornosc()
    {
        return Wypornosc;
    };
};

//OKRET PODWODNY

class OkretPodwodny : public Okret
{
                            //nowe parametry klasy okret podwodny
    int Wypornoscpodwodna;
    int Torpedydziobowe;
    int Torpedyrufowe;
    int Glebokosczanurzenia;

public:
    OkretPodwodny() : Okret("brak", 0), Wypornoscpodwodna(0), Torpedydziobowe(0), Torpedyrufowe(0), Glebokosczanurzenia(0) {};
    OkretPodwodny(string nazwa, int wypornosc, int wypornoscpodwodna, int torpedydziobowe, int torpedyrufowe, int glebokosczanurzenia=0)
        : Okret(nazwa, wypornosc), Wypornoscpodwodna(wypornoscpodwodna), Torpedydziobowe(torpedydziobowe), Torpedyrufowe(torpedyrufowe), Glebokosczanurzenia(glebokosczanurzenia) {};

    int wypornoscpodwodna()     //metoda wypornoscpodwodna zwraca wartosc Wypornoscpodwodna
    {
        return Wypornoscpodwodna;
    }

    int torpedydziobowe()     
    {
        return Torpedydziobowe;
    }

    int torpedyrufowe()    
    {
        return Torpedyrufowe;
    }

    int glebokosczanurzenia()     
    {
        return Glebokosczanurzenia;
    }

    void Zanurz(int Zanurzenie);
};

//metoda zanurz

void OkretPodwodny::Zanurz(int Zanurzenie)
{
    if (Glebokosczanurzenia == 0)  cout << "okret jest wynurzony \n";
    if ((Glebokosczanurzenia + Zanurzenie) < 0)
    {
        Glebokosczanurzenia = 0;
    }
    else 
    { 
        Glebokosczanurzenia = Glebokosczanurzenia + Zanurzenie;
    }
}

int main()
{
    OkretPodwodny op1("okret", 50, 30, 10, 10);
cout << "okret jest zanurzony na glebokosc" << op1.Zanurzenie() <<"m" << endl;
    cout << "zanurzam okret o kolejne 15 m" << endl;
    op1.Zanurz(15);
    cout << "okret jest zanurzony na glebokosc" << op1.Zanurzenie() << "m" << endl;
}

Czym spowodowany jest error
Błąd C2039 „Zanurzenie”: Nie jest składową „OkretPodwodny”
skoro w klasie OkretPodwodny jest "void Zanurz(int Zanurzenie);

0

Chyba chodziło o Glebokosczanurzenia.

0

ja widzę tylko metodę Zanurz(). Nie widzę nigdzie zdefiniowanej metody Zanurzenie(). Ani w klasie Okret ani w klasie OkretPodwodny.
@pasasap też tak mi się wydaje ;)

0

Rzeczywiście, dziękuję bardzo :)

0

KIlka uwag kosmetycznych.

Getery w C++ warto okrasić słowem const,. oznacza że na pewno metoda nie zmienia obiektu 'this'

int torpedydziobowe()  const   
    {
        return Torpedydziobowe;
    }

lub nawet, ten przykład jest przerysowany, zbędne dla typów podstawowych, ale użyteczne przy złożonych

const int torpedydziobowe()  const
    {
        return Torpedydziobowe;
    }

Puste konstruktory niczego nie wnoszą do tego projektu, są do usunięcia.

conio.h i cout są poza standardem, lepiej ich nie używać

Drukowanie o obiekcie z metod, a zarazem drukowanie z zewnątrz obiektu (z main'a) nie jest dobrą praktyką.

1
AnyKtokolwiek napisał(a):
const int torpedydziobowe()  const
    {
        return Torpedydziobowe;
    }

To const int to po co?

conio.h i cout są poza standardem, lepiej ich nie używać

cout poza standardem?

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