Klasa Vector i wskaźnik na zrobiony z nich matrix
Ostatnio zmodyfikowano 2015-11-13 14:15
skjeleton Temat założony przez niniejszego użytkownika |
Klasa Vector i wskaźnik na zrobiony z nich matrix » 2015-11-12 23:45:35 Cześć, Znowu mam problem z vector'ami. Internet milczy... nic nie mogę znaleźć na ten temat. Oto kod: void Map::ClearSquare( int Coords[ 2 ] ) { std::vector < std::vector < Square > >* Side; if( Coords[ 0 ] < 0 ) { Coords[ 0 ] *= - 1; Coords[ 0 ] -= 1; Side = & LeftSide; } else Side = & RightSide; Side[ Coords[ 0 ] ][ Coords[ 1 ] ]->Clear(); }
Funkcja ma czyścić konkretne pole na planszy. Side ma pokazywać na lewą, albo na prawą stronę mapy. Jeżeli [0], czyli X jest ujemne, to ma pokazywać na lewą stronę a jeżeli dodatnie, to na prawą. I teraz mając konkretną stronę tablicy, to za pomocą koordynacji każe obiektowi się wyczyścić. Dla wyjaśnienia: class Map { std::vector < std::vector < Square > > LeftSide; std::vector < std::vector < Square > > RightSide;
class Square { ... public: Square(); ~Square(); void Clear(); };
Pojawia się taki błąd: error: '__gnu_cxx::__alloc_traits<std::allocator<std::vector<Square> > >::value_type' has no member named 'Clear' Drugie pytanie: Czy opłaca się robić matrix z vector'a vector'ów? vector < vector < int > > nazwa;
|
|
Gibas11 |
» 2015-11-13 00:00:31 Źle do tego podszedłeś, twoje rozwiązanie byłoby prawidłowe gdybyś miał vector wskaźników, ty jednak operujesz na wskaźniku na vector. Zamiast Side[ Coords[ 0 ] ][ Coords[ 1 ] ]->Clear();
Powinno być tak: ( * Side )[ Coords[ 0 ] ][ Coords[ 1 ] ].Clear();
Krótki przykład: #include <iostream> #include <vector>
using namespace std;
vector < int > * j; vector < int > src;
int main() { for( int i = 0; i < 12; i++ ) src.push_back( i * 7 ); j = & src; for( int i = 0; i < 12; i++ ) cout <<( * j )[ i ] << endl; return 0; }
EDIT: Następnym razem spróbuj się też lepiej przyjrzeć temu co wyrzuca kompilator, z samej końcówki <std::vector<Square> > >::value_type' has no member named 'Clear' można dużo wywnioskować. |
|
skjeleton Temat założony przez niniejszego użytkownika |
» 2015-11-13 14:15:31 Tak, wiem, widziałem, jaką wyrzucił informację, ale nie wiedziałem dlaczego. Dzięki wielkie. Już naprawiłem. |
|
« 1 » |