Błąd przy tworzeniu typu vector klasy abstrakcyjnej

0

Jak w temacie, posiadam problem tego typu, że nie moge utworzyć zmiennej typu vector<Bryla> v; błąd: error C2259: 'Bryla' : cannot instantiate abstract class. Zmiana na vector<Szescian> v; pomaga, jednakże chce utworzyć vector, ktory bedzie przechowywał wszystkie bryły.

#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
#include <vector>
#include "string.h"
#include <list>
 
using namespace std;
 
class Bryla
{
        string nazwa;
public:
        Bryla(string nazwa)
        {
                this->nazwa = nazwa;
        }
        void WyswietlNazwe()
        {
                printf("%s\n", nazwa.c_str());
        }
        virtual double Objetosc()=0;// nie jest istotne dzialanie funkcji
};
 
 
class Szescian : public Bryla
{
        double dlBoku;
public:
        Szescian(double fdlBoku) :Bryla("szescian")
        {
                dlBoku=fdlBoku;
        }
        Szescian(double fdlBoku, string nazwa) :Bryla(nazwa)
        {
                dlBoku=fdlBoku;
        }
        double Objetosc()
        {
                return dlBoku*dlBoku*dlBoku;
        }
};
/*
class Kula : public Bryla
{
        double dlpromien;
public:
        double Objetosc()
        {
                return dlpromien;
        }
};*/
 
class ZbiorBryl
{
        vector<Bryla> v;
public:
        void DodajSzescian(Szescian s)
        {
               
                v.push_back(s);
        }
        double ObliczObjetosc()
        {
                double suma = 0;
                for(vector<Bryla>::iterator i = v.begin(); i!=v.end(); i++)
                {
                        suma +=i->Objetosc();
                }
                return suma;
        }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
 
        Szescian nowy0(5,"szescian");
        Szescian nowy1(23,"szescian");
        Szescian nowy2(3,"szescian");
        Szescian nowy3(2,"szescian");
        Szescian nowy4(1,"szescian");
        Szescian nowy5(4,"szescian");
        Szescian nowy6(15,"szescian");
        //printf("%f",nowy0->Objetosc());
       
        ZbiorBryl zbiorbryl;
        zbiorbryl.DodajSzescian(nowy0);
        zbiorbryl.DodajSzescian(nowy1);
        zbiorbryl.DodajSzescian(nowy2);
        zbiorbryl.DodajSzescian(nowy3);
        printf("Objetosc wynosi: %f",zbiorbryl.ObliczObjetosc());
       
 
        return 0;
}

 
2

Nie możesz stworzyć ani obiektu, ani tablicy (vector tworzy tablicę) klas abstrakcyjnych.
Ale możesz mieć wskaźniki lub tablice wskaźników.

0

Ok zadziałało :D Dzięki wielkie za pomoc :P

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