Szybkia sprawa, Kontener obiektów

0

Hej.
Mam problem czy utworzenie a motem korzystaniem z kontenera obiektów

mam klase Auto z konstruktorem i chce utworzyć z nią kontener

 vector<Auto> auta;

auta.push_back(new Auto(adres, i));

i w jakieś innej klasie chce się odwołać do metody w klasie Auto np pokazkolor(int zmienna);

Auto[indeks]->pokazkolor(zmienna);
 

i nie działa mi takie coś, a nie mam pojęcia jak to naprawić.

dzięki

1

Bo masz kontener obiektów, a pakujesz tam wskaźniki. Możesz to zrobić tak:

 
std::vector<Auto*> auta;
auta.push_back(new Auto(adres, i));

auta[0]->pokazkolor();

lub

std::vector<Auto> auta; 
auta.push_back(Auto(adres, i)); //tutaj dobrze pamiętać o konstruktorze kopiującym (a jeszcze lepiej przenoszącym i skorzystać z std::move)

auta[0].pokazkolor();
 
2

Istnieje też trzecia wersja, IMO najprzyjemniejsza w tym przypadku

vector<Auto> auta;
auta.emplace_back(adres, i);       // nie sa tworzone niepotrzebne tymczasowki

auta[0].pokazkolor();

Warto również pamiętać, że pierwsza wersja (z wskaźnikami) może prowadzić do wycieków pamięci jeśli się nie sprząta po sobie.

0

Dzięki wielkie Panowie.
uzyłem sposoby tworka i niby wszystko ok ale pojawiły się jakieś dziwne i mega długie nazwy błedów
tylko jeden był w miare normalny
Error LNK1120 2 unresolved externals

a reszta to errory 2001 i 2019

0

http://stackoverflow.com/questions/7410798/c-fatal-error-lnk1120-1-unresolved-externals

Do tego oczywiście trzeba mieć obsługę C++11 włączoną.

0

aha dzięki :)

A wiesz może jak to włączyć w visualu?

0

Nie, ale jestem pewien że google wie ;)

0

mam najnowszego 2015

0

Powinieneś mieć to defaultowo włączone, zwłaszcza w 2015. Spróbuj skompilować to się przekonasz. Jak nie będzie działać, to błąd kompilatora powinien Ci powiedzieć, co trzeba zrobić. Niemniej jednak jestem niemal przekonany, że będzie działać domyślnie.

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