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

Zwrócenie wskaźnika przez metodę

Ostatnio zmodyfikowano 2013-05-01 21:40
Autor Wiadomość
sinoo
Temat założony przez niniejszego użytkownika
Zwrócenie wskaźnika przez metodę
» 2013-05-01 10:40:33
Witam,
mój problem dotyczy tego fragmentu kodu:

C/C++
class World
{
private:
    unsigned char MapID;
    std::vector < Obiekt > vObiekty;
    std::vector < sf::Image > vGrafika;
   
public:
    World()
    { }
   
    std::vector < Obiekt > * GetObjectsVector()
    {
        return * vObiekty;
    }
   
};

Niestety wywala błąd:
1>c:\documents and settings\user\moje dokumenty\visual studio 2008\projects\sfml_game\sfml_game\main.cpp(110) : error C2100: illegal indirection
1>c:\documents and settings\user\moje dokumenty\visual studio 2008\projects\sfml_game\sfml_game\main.cpp(110) : error C2440: 'return' : cannot convert from 'std::vector<_Ty>' to 'std::vector<_Ty> *'
1>        with
1>        [
1>            _Ty=Obiekt
1>        ]
1>        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
P-81687
m4tx
» 2013-05-01 11:32:56
Jak chcesz zwrócić wskaźnik to użyj operatora pobrania adresu -
&
.
P-81690
sinoo
Temat założony przez niniejszego użytkownika
» 2013-05-01 11:52:08
dzięki, pomogło. Tylko nie wiem dlaczego, ale nie mogę użyć vector'a
std::vector < Obiekt > * RvObjects;
 w metodzie
GoLeft()
 klasy Hero(kompilator po prostu jej w tym miejscu nie widzi). Kod tej klasy:
C/C++
class Hero
    : public Obiekt
{
private:
    std::vector < Obiekt > * RvObjects;
public:
    Hero( int xPos, int yPos, sf::Image & img, std::vector < Obiekt > * vObjects )
        : Obiekt( xPos, yPos, img )
        , RvObjects( vObjects )
    { }
   
    void GoLeft()
    {
        for( int n = 0; RvObjects.size(); n++ )
        {
            if( !Colision( RvObjects.at( n ), 3 ) )
                 Sprajt.Move( - 1.0, + 0.0 );
           
        }
    }
   
private:
    bool Colision( Obiekt & Object, unsigned char SIDE )
    {...}
};
P-81691
RazzorFlame
» 2013-05-01 12:34:56
Widzi ale odwołujesz się do tego jak do zwykłej zmiennej a nie adresu. Musisz użyć dereferencji:
C/C++
* RvObiects.size(); //...
Albo operatora ->
C/C++
RvObiects->size();
P-81693
sinoo
Temat założony przez niniejszego użytkownika
» 2013-05-01 13:44:04
Ogromne dzięki. Pomogło :)
P-81699
pekfos
» 2013-05-01 14:46:51
Widzi ale odwołujesz się do tego jak do zwykłej zmiennej a nie adresu. Musisz użyć dereferencji:
C/C++
* RvObiects.size(); //...
Dalej odwołujesz się jak do zwykłej zmiennej. Musisz użyć dereferencji:
C/C++
( * RvObjects ).size();
P-81700
RazzorFlame
» 2013-05-01 16:42:40
W kursie który czytałem było że dereferencja wygląda tak jak pokazałem. Kurs: www.guidecpp.cal.pl Zobacz. Zawsze myślałem że gwiazdka wystarczy... I przestań mnie przedrzeźniać bo to już się robi irytujące...
P-81717
akwes
» 2013-05-01 16:56:16
@RazzorFlame, a kto Cię przedrzeźnia?

Operator "." ma wyższy priorytet niż "*". Dlatego wyrażenie:
* obj.foo();
 to tak naprawdę
*( obj.foo() );
 czyli operator "*" dotyczy zmiennej zwracanej przez funkcję foo. Jeżeli jednak wymusimy aby operator "*" został wykonany wcześniej (czyli tak jak napisał pekfos) to wszystko jest ok.
P-81718
« 1 » 2
  Strona 1 z 2 Następna strona