Problem z MAPO-VECTOREM.

0

Witam

mam problem z poniższym programem. Otóż nie wiem jak stworzyć vector referencji.
Zależy mi żeby późniejsza mape zainicjalzować np. Samochod, lodz, lub zmienic referencje z lodzi na samochod.

#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<list>


using namespace std;

class Pojazd
{
   protected :
      string nazwa;

   public :
      Pojazd(string nazwa)
      {
         this->nazwa = nazwa;
      }
      string getNazwa() const { return nazwa;}
};

class Samochod : public Pojazd
{
   private :
      int przebieg;
   public :
      Samochod(int przebieg, string naz) : Pojazd(naz)
      {
         this->przebieg = przebieg;
      }
};

class Lodz : public Pojazd
{
   private :
      int przebieg;
   public :
      Samochod(int przebieg, string naz) : Pojazd(naz)
      {
         this->przebieg = przebieg;
      }
};

int main()
{
map<int, vector<*Pojazd> >tablicaPostaci;
vector<*Pojazd>myVec[10];
Pojazd *p;
//vector<Postac> *myVec;


   for(int i = 0; i < 10; ++i)
   {
      for(int j = 0; j < 10; ++j)
      {
         myVec[i].add(p);
      }
      tablicaPostaci[i] = myVec[i];
   }

//Definicja elementu tablicy tab[0][0]

return 0;
}

Błedy znajduja sie w tych linijach :

map<int, vector<*Pojazd> >tablicaPostaci;
vector<*Pojazd>myVec[10];
Pojazd *p;

Był bym bardzo bardzo wdzieczny, wdzięczny i za pomoc mogę oferować piwo jak ktoś jest z Krakowa. Albo opowiem dowcip życia :D

Dziękuję z Góry!

0

Nie przyglądałem się temu dokładnie, ale gwiazdka jest nie z tej strony!

0

deklaracja vectora<TYP>nazwaVectora

a ja chce żeby moim typem był adres Pojazdu

0
map<int, vector<Pojazd*> >tablicaPostaci;
vector<Pojazd*> myVec[10];
myVec[i]=p; // zamiast myVec[i].add(p);   ale to i tak nie ma sensu bo p też nie jest zainicjalizowany
tablicaPostaci[i]=myVec[i]; // indeks z jednej tablicy mapujesz na element tablicy? po kiego sama myVec to już robi.
0

teraz jest maleńki problemik z vector<Pojazd *p>::iterator it;
P.S ogólnie dobrze zainicjaliowana tablica (10x10) typem Pojazd ??

#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<list>

using namespace std;

class Pojazd
{
   protected :
      string nazwa;

   public :
      Pojazd(string nazwa)
      {
         this->nazwa = nazwa;
      }
      string getNazwa() const { return nazwa;}
};

class Samochod : public Pojazd
{
   private :
      int przebieg;
   public :
      Samochod(int przebieg, string naz) : Pojazd(naz)
      {
         this->przebieg = przebieg;
      }
};

class Lodz : public Pojazd
{
   private :
      int przebieg;
   public :
      Lodz(int przebieg, string naz) : Pojazd(naz)
      {
         this->przebieg = przebieg;
      }
};

int main()
{
map<int, vector<Pojazd*> >tablicaPostaci;
vector<Pojazd*>myVec[10];
Pojazd *p;
int i;
//vector<Postac> *myVec;



   for(int i = 0; i < 10; ++i)
   {
      for(int j = 0; j < 10; ++j)
      {
         myVec[i].push_back(p);
      }
      tablicaPostaci[i]=myVec[i];
   }

//teraz chce zainicjalizowac komorke tablicaPostaci[2][3] typem Samochod
vector<Pojazd *p>::iterator it;
   for( it=tablicaPostaci[2].begin(), i = 0; i <= 3; ++it, ++i)
   {
     it = new Samochod(333, "Macon");
   }


return 0;
}
0

coś mi się wydaje, że robisz to trochę na ślepo

vector<Pojazd *>::iterator it;
(*it) = new Samochod(333, "Macon"); 

ta inicjalizacja tablicy wydaje mi się bardzo dziwna, a jak chce skompilować Twój program to mam coś takiego
ld.exe||cannot open output file D:\qwes.exe Permission denied|

ktoś wie czemu ;o?

więc nie mam jak sobie prześledzić tego pod debuggerem

0

Mi się kompiluje :D

 
#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<list>

using namespace std;

class Pojazd
{
   protected :
      string nazwa;

   public :
      Pojazd(string nazwa)
      {
         this->nazwa = nazwa;
      }
      string getNazwa() const { return nazwa;}
};

class Samochod : public Pojazd
{
   private :
      int przebieg;
   public :
      Samochod(int przebieg, string naz) : Pojazd(naz)
      {
         this->przebieg = przebieg;
      }
};

class Lodz : public Pojazd
{
   private :
      int przebieg;
   public :
      Lodz(int przebieg, string naz) : Pojazd(naz)
      {
         this->przebieg = przebieg;
      }
};

int main()
{
map<int, vector<Pojazd*> >tablicaPostaci;
vector<Pojazd*>myVec[10];
Pojazd *p;
int i;
//vector<Postac> *myVec;

   for(int i = 0; i < 10; ++i)
   {
      for(int j = 0; j < 10; ++j)
      {
         myVec[i].push_back(p);
      }
      tablicaPostaci[i]=myVec[i];
   }

//teraz chce zainicjalizowac komorke tablicaPostaci[2][3] typem Samochod
vector<Pojazd *>::iterator it;
   for( it=tablicaPostaci[2].begin(), i = 0; i <= 3; ++it, ++i)
   {
     (*it) = new Samochod(333, "Macon");
   }


return 0;
}

0

tworze tablice [10][10], której każdą komórkę inicjalizuję typem pojazd
potem wybrane komórki typem samochod a reszte lodzia. a potem chce zemienić typ lodzi na typ samochód

za 15min bedzie dalsza cześć mojego dzieła :p

0

Nie możesz zmienić typu, możesz podmienić obiekt. Przed podmianą ten który był musisz zwolnić, bo sam tego nie zrobi. Z tego co napisałeś nie potrzebujesz żadnej mapy. tylko

vector<vector<Pojazd*> > tb(10,vector<Pojazd*>(10,0));

dostęp:

if(tb[y][x]) { delete[] tb[y][x]; tb[y][x]=0; }
tb[y][x]=new Samochod(333, "Macon");

Przy takiej organizacji klas koniecznym jest wirtualny destruktor klasy Pojazd, no chyba że ...

0

powiedział byś co to robi w skrócie ??
vector<vector<Pojazd*> > tb(10,vector<Pojazd*>(10,0));

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