jak prawidłowo odczytać klasę z kontenera za pomoca iteratora?

0

Hej! :)
Załóżmy, że mam klasę CreateVCheckBox, w tej klasie funkcję hWindow() i kontener <vector> wskaźników na klasy.
jak prawidłowo wywołać funkcję hWindow z każdej klasy zapisanej do kontenera?
Póki co mam to:

 
        vector<CreateVCheckBox *>::iterator it;
        for(it = Lista.begin(); it != Lista.end(); it++)
        {
             *it->hWindow(); 
             break;
        }

Ale nie działa. W linii "*it->hWindow();" mam błąd:

||=== Build: Release in odtwarzacz muzyczny2 (compiler: GNU GCC Compiler) ===|
C:\Users\Świdwa\Desktop\odtwarzacz muzyczny2\wh_Lista.h||In member function 'int CreateVList::f_GetFreeID()':|
C:\Users\Świdwa\Desktop\odtwarzacz muzyczny2\wh_Lista.h|281|error: request for member 'hWindow' in '* it.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator-><CreateVCheckBox**, std::vector<CreateVCheckBox*> >()', which is of pointer type 'CreateVCheckBox*' (maybe you meant to use '->' ?)|
C:\Users\Świdwa\Desktop\odtwarzacz muzyczny2\wh_Lista.h|273|warning: unused variable 'ID' [-Wunused-variable]|
C:\Users\Świdwa\Desktop\odtwarzacz muzyczny2\wh_Lista.h|284|warning: no return statement in function returning non-void [-Wreturn-type]|
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|

4
  1. Twój zapis jest tożsamy z *((it->hWindow)()). Chciałeś napisać: (*it)->hWindow()
  2. zapoznaj się z inkrementacją bo jej nie rozumiesz: http://4programmers.net/Forum/1101404 (zbliżasz się do miejsca gdzie to ma znaczenie)
  3. Iteruj po const iteratorach jeśli to możliwe (cend, cbegin)
  4. używaj ranged for:
for(auto const& el : Lista){
	el->hWindow();
}
0

Kompletnie nie potrafię przetrawić

auto const& el : Lista 

Mógłbyś wyjaśnić jak to działa lub odprawić mnie z jakimś linkiem co i jak? :)

0

Hmm, tylko nie rozumiem 1 przykładu:

for(int n: {0, 1, 2, 3, 4, 5}) // the initializer may be a braced-init-list
     std::cout << n << ' ';
 

Skąd niby pętla "wie", kiedy ma się skończyć? Używa coś w stylu sizeof() ?

0

Spójrz pod punkt Explanation, jest dokładnie wytłumaczone jak to rozumieć.

0

Czyli:

 
for(int n: {0, 1, 2, 3, 4, 5})
{
     std::cout << n << ' ';
}     
  • Powstaje iterator<int> ustawiony na pierwszy element,
  • range_declaration = (chyba) rozmiarowi {0, 1, 2, 3, 4, 5} podzielonego przez sizeof(int),
  • range_expression to ilość "bajtów" pozostałych do wczytania?
    I to się porusza jak najprawdziwszy iterator tak?
4

Nie. range_declaration to int n. range_expression to initializer_list<int>{0,1,2,3,4,5}. Gdybyś spojrzał pod punkt Explanation, a nie nad to byś zobaczył faktyczne wytłumaczenie.

for(T element : range){
	stuff(element);
}

to mniej więcej to samo co:

auto&& __range = range;
for(auto __begin = begin(__range), __end = end(__range); __begin != __end; ++__begin){
	T element = *__begin;
	stuff(element);
}

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