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();
}