Jak wywołać metodę obiektu wskazywanego przez wskaźnik?

0

Cześć,
Mam klasę silnik, w niej metodę Info(), która zwraca informację o silniku . W klasie samolot jest druga metoda Info() zwracająca informacje o samolocie.W tej klasie umieściłam też wskaźnik do obiektu klasy silnik. Chcę żeby metoda Info() z klasy samolot wyswietlała informację zarówno o samolocie jak i o silniku tego samolotu. Dlaczego jeśli zrobię takie wywołanie:

#include<iostream>
#include"silnik.h"
#include"samolot.h"
#include<string>
#include<sstream>

int main(){
	Samolot F16=Samolot(2000, 345, "F16", "fr56 66", 7000);
	cout<<F16.silnikPtr->Info();			//dobrze wywołuję tą funkcję?(Chciałabym żeby zadziałała funkcja z klasy silnik)
        cout<<F16.Info();                                //a tutaj chcę żeby program wyświetlił wszystkie informacje, czyli funkcja  z klasy Samolot 
	getchar();
	return 0;
}

Wyskakuje błąd:

Unhandled exception at 0x75beb727 in silnik.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0036e3dc..

Tutaj są definicje klas:

//silnik.cpp

#include<iostream>
#include "silnik.h"
#include<string>
#include<sstream>
using namespace std;

silnik::silnik(string _numerSilnika, float _pojemnosc){			//konstruktor

	numerSilnika=_numerSilnika;
	pojemnosc=_pojemnosc;
}

(..)

string silnik::Info(){
	
	ostringstream komunikat;
	string numer=GetNum();
	float pojemnosc=GetPojemnosc();

	komunikat<<"Parametry silnika:"<< endl <<" Numer: "<<numer<<endl<<"Pojemnosc:"<<pojemnosc<<endl;

	return komunikat.str();
}

//samolot.cpp

#include<iostream>
#include<string>
#include<sstream>
#include"samolot.h"
#include"silnik.h"

Samolot::Samolot(int liczbaPasazerow, float dlugosc, string model, string numerSilnika, float pojemnoscSilnika){

	silnik silnikSamolotu(numerSilnika, pojemnoscSilnika);

	this->silnikPtr=&silnikSamolotu;
	this->liczbaPasazerow=liczbaPasazerow;
	this->dlugosc=dlugosc;
	this->model=model;
}

//tutaj jest druga metoda o nazwie Info:

string Samolot::Info(){

	ostringstream komunikatSamolot;
	string komunikatSilnik=silnikPtr->Info();

	komunikatSamolot<<"Liczba pasazerow: "<<liczbaPasazerow<<" Dlugosc: "<<dlugosc<<" Model "<<model;
	komunikatSamolot<<komunikatSilnik;
	
	return komunikatSamolot.str();
}
0

Debugger do dłoni i niech cię on przed segfaultami obroni ;).

0

Myślałam że ten błąd o którym pisałam w poście to był komunikat debuggera. Nie wiem czy debugger to to o czym myślę. Używam Visual Studio, tam chyba sie automatycznie debuguje, a przynajmniej ja tak myslalm do tej pory.
Co oznacza ten bląd o którym napisałam? Chodzi o to że cos zle jest z tym wskaźnikiem do silnik?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.