Błąd: pure virtual function call

0

Witam, przy uruchomieniu programu zbudownego z poniższego kodu, pojawia się błąd: pure virtual function call

#include <iostream>
#include <cstdlib>
#include <list>
using namespace std;


class baza
{

protected:

	int a;

public:

	baza(int x) : a(x) {};
	virtual ~baza() {};

	void pokaz() { cout << a << endl; }
	virtual void metoda_wirtualna() = 0 ;
};

class pochodna : public baza
{
	float b;

public:
	
	pochodna(int x, float y) : baza(x), b(y) {};
	~pochodna() {};

	void metoda_wirtualna()
	{
		cout << "metoda wirtualna klasy pochodnej" << endl;
	}

};

int main()
{
	list <baza*> lista;
	lista.push_back(&pochodna(5, 7.51));
	lista.front()->metoda_wirtualna();  //  <--- TUTAJ BŁĄD

	system("pause");
	return 0;
}

Błąd powoduje kod oznaczony komentarzem. Po jego usunięciu błędu nie ma. Dodam, że przy wołaniu funkcji pokaz() błędu nie ma:

lista.front()->pokaz();

Proszę o pomoc.

0

Wrzucasz obiekt tymczasowy, który po push_back przestaje istnieć, wywoływany jest jego destruktor. Efekt jest taki, że tablica metod wirtualnych nie istnieje. Dorzuć new i problem z głowy.

lista.push_back(new pochodna(5, 7.51));

Swoją drogą kompilator powinien warna wywalić, że pobierasz adres obiektu tymczasowego.

0

Pamietaj takze o tym, ze funkcje inline nie moga byc wirtualne.

0

Dziękuję za pomoc. Pozdrawiam.

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