Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

jak używać vectora o type sf::Text - vector <sf::Text>

Ostatnio zmodyfikowano 2017-03-11 23:54
Autor Wiadomość
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:
C/C++
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).
P-158889
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).
C/C++
sf::Text tmp; // nie znam typu sf::Text wiec tak zostawie, po prostu tworzysz zmienna typu sf::Text
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.
P-158891
Bielan
» 2017-03-11 22:49:20
1. ?

Z tego co widziałem to jedyny konstruktor sf::Text przyjmuje 3 argumenty


Public Member Functions
  Text ()
  Default constructor.
http://www.sfml-dev.org​/documentation/2.4.2​/classsf_1_1Text.php


2. Dlaczego potrzebujesz dodawać tekst na zapas?
P-158893
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?
P-158894
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).
P-158895
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.

C/C++
wypisz.push_back( sf::Text() );
wypisz.back().setString( "cstring" );
P-158896
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.
P-158898
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.
P-158899
« 1 » 2
  Strona 1 z 2 Następna strona