latajacaryba Temat założony przez niniejszego użytkownika |
jak używać vectora o type sf::Text - vector <sf::Text> » 2017-03-11 22:13:04 Witam. Chciałem stworzyć vector o typie sf::Text vector < sf::Text > wypisz i chciałem używać metody pushback. Problem w tym, że metoda ta przyjmuje argumenty, a ja potrzebuje czegoś takiego: wypisz.push_back(); wypisz[ wypisz.size() ].setString( "cstring" );
Czy da się jakoś temu zaradzić? Z tego co widziałem to jedyny konstruktor sf::Text przyjmuje 3 argumenty (string, czcionka i rozmiar tekstu). |
|
maly7 |
» 2017-03-11 22:21:26 Jeśli w vectorze masz typy sf::Text to przed użyciem push_back musisz utworzyć taki element i go tam wsadzić (jako argument). sf::Text tmp; tmp.setString( "cstring" ); wypisz.push_back( tmp );
Ewentualnie, wywołać konstruktor jako argument push_back: wypisz.push_back( sf::Text( arg1, arg2, arg3 ) ); Natomiast w twoim kodzie jest błąd. wypisz.size() zwraca liczbę elementów wektora, wiec nigdy nie ma elementu o takim id, maksymalny element tego wektora ma id wypisz.size()-1. |
|
Bielan |
» 2017-03-11 22:49:20 |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2017-03-11 22:49:58 @up Nie wspominałem o domyślnym, powiedziałem za to, że jest ten z 3 argumentami. Z tego co rozumiem, to vector jest (dynamiczną) tablicą obiektów, a nie wskaźników na obiekty? Wnioskuje po tym, że kiedy napiszemy coś takiego: wektor_int push_back( 5 ) to tworzymy obiekt, bo jak niby wskazać na WARTOŚĆ 5? Skoro możemy przekazywać tam również obiekty to używany jest konstruktor kopiujący? |
|
maly7 |
» 2017-03-11 22:55:30 Można, tylko zauważ że w tym kodzie co napisałeś wstawiasz dwie zmienne typu sf::Text do wektora. Jeśli o to chodzi to jest poprawnie :D bo jak niby wskazać na WARTOŚĆ 5? Na każdą wartość, która jest gdzieś zapisana można wskazać (utworzyć wskaźnik). Vector alokuje sobie sam pamięć, zapisuje tam wartości i w skrócie wszystko robi sam, żebyś ty nie musiał. Ty możesz wstawiać tam sobie wartości i nic więcej może cie nie obchodzić (co prawda lepiej wiedzieć mniej więcej co się tam dzieje, lub jak to działa). |
|
Bielan |
» 2017-03-11 22:56:41 Nie wspominałem o domyślnym, powiedziałem za to, że jest ten z 3 argumentami.
|
Nie. Oto co powiedziałeś: Z tego co widziałem to jedyny konstruktor
|
W czym zatem masz konkretnie problem? Zapis, który podałeś z wiedzą o domyślnym konstruktorze normalnie działa. wypisz.push_back( sf::Text() ); wypisz.back().setString( "cstring" );
|
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2017-03-11 23:11:16 @up racja, mój bład, przepraszam
Tak, już jest dobrze, nie wiedziałem, że tak można: a.push_back(sf::Text() ). Bo skoro przyjmuje jakiś argument, a konstruktor nic nie zwraca to czemu tak można? A może push_back przyjmuje obiekt danej klasy (w tym przypadku obiekt domyślny utowrzony przez sf::Text() ) Jeśli tak, to push_back musi być przeciążony, bo raz przyjmuje wartość (np. przy int), a tu obiekt. |
|
maly7 |
» 2017-03-11 23:16:24 http://cpp0x.pl/dokumentacja/standard-C++/vector/push_back/820 Argumenty: Argument Opis Type element Element, którego kopia ma zostać dodana na koniec kontenera. |
|
« 1 » 2 |