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 |