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