Dubgron Temat założony przez niniejszego użytkownika |
Błąd przy przesyłaniu obiektu do metody innej klasy. » 2016-03-30 20:24:56 Dobry wieczór, ostatnio zacząłem uczyć się biblioteki SFML i postanowiłem zdobywać wiedzę poprzez pisanie kodu, więc zacząłem robić jakąś prostą grę i taki o to błąd mi wyskoczył. Kiedy w pliku nagłówkowym funkcja wygląda tak: void step( sf::Vector2f &, const Object & ); To w logach wyskakuje: Severity Code Description Project File Line Suppression State Error C2143 syntax error: missing ',' before '&' Sizzle Engine c:\users\patryk\documents\visual studio 2015\projects\sizzle engine\player.h 22 Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Sizzle Engine c:\users\patryk\documents\visual studio 2015\projects\sizzle engine\player.h 22
A gdy wygląda tak: void step( sf::Vector2f &, Object const & ); To wyskakuje: Severity Code Description Project File Line Suppression State Error C2061 syntax error: identifier 'Object' Sizzle Engine c:\users\patryk\documents\visual studio 2015\projects\sizzle engine\player.h 22
Nie wiem jak to naprawić, by działało, więc pytam się was. Inne elementy kodu, które mogą pomóc: #pragma once
#ifndef PLAYER_H #define PLAYER_H #define GRAVITY 9.81
#include <SFML/Graphics.hpp> #include <string> #include <vector>
#include "Object.h"
class Player { public: Player( sf::Vector2f ); ~Player(); void collisionFollow(); void draw( sf::RenderWindow & ); sf::Vector2f move( float dt ); void step( sf::Vector2f &, Object const & ); void setBounds( sf::Vector2f &, sf::Vector2u &, float &, float &, float &, float & ); #endif
#include <cmath>
#include "Player.h"
void Player::step( sf::Vector2f & move, const Object & obj ) { float pTop, pBottom, pLeft, pRight; float oTop, oBottom, oLeft, oRight; setBounds( sprite.getPosition() + move, sprite.getTexture()->getSize(), pTop, pBottom, pLeft, pRight ); setBounds( obj.getPosition(), obj.getTextureSize(), oTop, oBottom, oLeft, oRight ); if( pRight < oLeft || pLeft > oRight || pBottom < oTop || pTop > oBottom ) sprite.setPosition( sprite.getPosition() + move ); else; }
Z góry dzięki! |
|
michal11 |
» 2016-03-30 20:33:22 void step( sf::Vector2f &, Object const & ); masz zamienione miejscami Object i const. |
|
Monika90 |
» 2016-03-30 20:36:07 Michał, to nie ma znaczenia, a nawet Object const& jest bardziej logiczne. |
|
Dubgron Temat założony przez niniejszego użytkownika |
» 2016-03-30 20:36:56 @michal11 Polecam przeczytać cały post. Napisałem, że próbowałem tak i tak, a dla każdego sposobu wyrzucało mi różne błędy. |
|
Monika90 |
» 2016-03-30 20:39:03 pokaż co masz w pliku object.h |
|
Dubgron Temat założony przez niniejszego użytkownika |
» 2016-03-30 20:40:21 Object.h #pragma once
#ifndef OBJECT_H #define OBJECT_H
#include <SFML/Graphics.hpp> #include <SFML/Graphics/Rect.hpp> #include <string>
#include "Player.h"
class Object { friend class Player; public: Object( sf::Vector2f, std::string, std::string, float = 0 ); ~Object(); void draw( sf::RenderWindow & ); sf::Vector2f getPosition() const; sf::Vector2u getTextureSize() const; private: std::string tag; sf::Sprite body; sf::Texture texture; };
#endif
Object.cpp #include "Object.h"
Object::Object( sf::Vector2f position, std::string source, std::string tag, float angle ) { texture.loadFromFile( source ); body.setTexture( texture ); body.setPosition( position ); body.setRotation( angle ); this->tag = tag; }
Object::~Object() { }
void Object::draw( sf::RenderWindow & window ) { window.draw( body ); }
sf::Vector2f Object::getPosition() const { return body.getPosition(); }
sf::Vector2u Object::getTextureSize() const { return body.getTexture()->getSize(); }
|
|
Monika90 |
» 2016-03-30 20:44:11 Usunięcie #include "Player.h" z pliku object.h powinno pomóc. |
|
michal11 |
» 2016-03-30 20:46:37 Rzeczywiście, tak to jest jak się chce za szybko pomóc, sorry. |
|
« 1 » 2 |