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

Błąd przy przesyłaniu obiektu do metody innej klasy.

Ostatnio zmodyfikowano 2016-03-30 20:47
Autor Wiadomość
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:

C/C++
//Player.h
#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 & );
   
   
    // Nie ważne dla problemu zmienne
   
    #endif // ! PLAYER_H

C/C++
//Fragmenty Player.cpp
#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!
P-146789
michal11
» 2016-03-30 20:33:22
void step( sf::Vector2f &, Object const & );

masz zamienione miejscami Object i const.
P-146791
Monika90
» 2016-03-30 20:36:07
Michał, to nie ma znaczenia, a nawet Object const& jest bardziej logiczne.
P-146792
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.
P-146794
Monika90
» 2016-03-30 20:39:03
pokaż co masz w pliku object.h
P-146795
Dubgron
Temat założony przez niniejszego użytkownika
» 2016-03-30 20:40:21
Object.h
C/C++
#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_H

Object.cpp
C/C++
#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();
}
P-146796
Monika90
» 2016-03-30 20:44:11
Usunięcie
#include "Player.h"
 z pliku object.h powinno pomóc.
P-146798
michal11
» 2016-03-30 20:46:37
Rzeczywiście, tak to jest jak się chce za szybko pomóc, sorry.
P-146800
« 1 » 2
  Strona 1 z 2 Następna strona