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

Klasa Vector i wskaźnik na zrobiony z nich matrix

Ostatnio zmodyfikowano 2015-11-13 14:15
Autor Wiadomość
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:
C/C++
void Map::ClearSquare( int Coords[ 2 ] ) //[0]-x, [1]-y
{
    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:
C/C++
class Map
{
    std::vector < std::vector < Square > > LeftSide;
    std::vector < std::vector < Square > > RightSide;

C/C++
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?
C/C++
vector < vector < int > > nazwa;
P-140056
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
C/C++
Side[ Coords[ 0 ] ][ Coords[ 1 ] ]->Clear();
Powinno być tak:
C/C++
( * Side )[ Coords[ 0 ] ][ Coords[ 1 ] ].Clear();

Krótki przykład:
C/C++
#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ć.
P-140060
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.
P-140071
« 1 »
  Strona 1 z 1