Zwrócenie wskaźnika przez metodę
Ostatnio zmodyfikowano 2013-05-01 21:40
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:  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   | 
 | 
m4tx  | 
» 2013-05-01 11:32:56 Jak chcesz zwrócić wskaźnik to użyj operatora pobrania adresu -  & .  | 
 | 
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:  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 )     {...} };  | 
 | 
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: Albo operatora ->  | 
 | 
sinoo Temat założony przez niniejszego użytkownika  | 
» 2013-05-01 13:44:04 Ogromne dzięki. Pomogło :)  | 
 | 
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:
  |  
 Dalej odwołujesz się jak do zwykłej zmiennej. Musisz użyć dereferencji:  | 
 | 
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...  | 
 | 
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.   | 
 | 
|  « 1 »  2 |