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

[C++] Organizowanie kodu źródłowego

Ostatnio zmodyfikowano 2012-03-22 17:25
Autor Wiadomość
hincu
Temat założony przez niniejszego użytkownika
[C++] Organizowanie kodu źródłowego
» 2012-03-21 20:36:15
Witam mam dziwny problem podczas kompilacji mojej gry mianowicie mam klase Player oraz Enemy, w klasach tych posiadam metody gdzie argumentami obiekty tych klas. Problem polega na tym ze przy kompilacji wywala mi errory ze klasy nie sa zadeklarowane, czy moze to byc spowodowane tym ze klasy sa podzielone na pliki?
P-53053
SeaMonster131
» 2012-03-21 20:37:28
Jeżeli masz zmienną czy klasę w jednym pliku, a chcesz jej użyć w drugim pliku, to musisz ją "dołączyć" poprzez include.
P-53054
hincu
Temat założony przez niniejszego użytkownika
» 2012-03-21 20:40:05
dodawalem od poczatku : P podstawy znam lecz problem jest taki sam jak bez #include "Player.h" ( w pliku Enemy.h ) i odwrotnie
P-53055
SeaMonster131
» 2012-03-21 20:43:22
To może kod pokaż, zobaczymy co jest nie tak.
P-53057
hincu
Temat założony przez niniejszego użytkownika
» 2012-03-21 20:50:04
prosze bardzo : P

C/C++
#ifndef PLAYER_H
#define PLAYER_H

#include "Enemy.h"


class Player
{
private:
    double Angle;
    sf::Vector2f LPos;
    int HP;
    int MaxDMG;
    int MinDMG;
   
public:
    char MoveSpeed;
    sf::Sprite PlayerGFX;
    void LoadSprite( sf::Image & );
    void SetPlayerSpeed( float );
    void PrintPlayerPos( sf::RenderWindow & );
    void PlayerRotate( const sf::Input & );
    void GetLastPosition();
    void SetLastPosition();
    void Draw( sf::RenderWindow & );
    void Move( float, float );
    void Spawn( float, float );
    void SetPlayerHP();
    void SetMaxDMG();
    void SetMinDMG();
    void Attack( Enemy & );
    bool CheckCollision( sf::Sprite & );
    float GetPlayerPosX();
    float GetPlayerPosY();
};
#endif // CHARACTER_H

C/C++
#ifndef ENEMY_H
#define ENEMY_H

#include "Definitions.h"

class Enemy
{
private:
   
    int Frames;
    int Exp;
    int HP;
    float Range;
    float Angle;
    float DirTime;
    float MoveSpeed;
    char Dir;
    sf::Clock DirTimer;
    sf::Vector2f LPos;
   
public:
   
    sf::Sprite EnemyGFX;
    float Vector( sf::Vector2f & );
    bool isDead;
    bool isVisible( sf::Sprite & );
    bool CheckCollision( sf::Sprite & );
    void SetMoveSpeed( float );
    void SetDirTime( float );
    void SetRange( float );
    void Follow( sf::Sprite & );
    void Move();
    void MoveTo( sf::Sprite & );
    void RandDir();
    void Draw( sf::RenderWindow & );
    void EnemyRotate( sf::Sprite & );
    void GetLastPosition();
    void SetLastPosition();
    void Spawn( float, float );
   
};

#endif // ENEMY_H

a to plik definitions.h

C/C++
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>

#include "util.h"
#include "GUI.h"
#include "Player.h"
#include "Object.h"
#include "Collision.h"
#include "Enemy.h"
#define PI 3.14159265
P-53058
DejaVu
» 2012-03-21 21:24:23
Wciągaj pliki tylko te, które są potrzebne w danym momencie. Ty chcesz stworzyć jeden plik definitions.h, który ma wciągać wszystkie inne - tak można zrobić pod warunkiem, że wszystkie inne pliki nie będą jego wciągały. W przeciwnym wypadku prędzej czy później (raczej prędzej) dostajesz błędy kompilacji 'undeclared'.
P-53059
hincu
Temat założony przez niniejszego użytkownika
» 2012-03-21 21:29:11
tak tez robilem i error wciaz jest ten sam mianowicie
error: 'Enemy' has not been declared
P-53060
kubawal
» 2012-03-22 16:18:45
spróbuj w pliku declarations.h dać takie coś
C/C++
#ifndef DECLARATIONS_H
#define DECLARATIONS_H

#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>

#ifndef UTIL_H
#include "util.h"
#endif //UTIL_H

#ifndef GUI_H
#include "GUI.h"
#endif //GUI_H

#ifndef PLAYER_H
#include "Player.h"
#endif //PLAYER_H

#ifndef OBJECT_H
#include "Object.h"
#endif //OBJECT_H

#ifndef COLLISION_H
#include "Collision.h"
#endif //COLLISION_H

#ifndef ENEMY_H
#include "Enemy.h"
#endif //ENEMY_H

#define PI 3.14159265
#endif // DECLARATIONS_H

Trochę dłuższe, ale powinno rozwiązać problem o którym mówił DejaVu. Zastosowanie dyrektyw #ifndef zapobiegnie dołączaniu pliku przez samego siebie

PS. Czy zauważyłeś, że w pliku Player.h jest
C/C++
#endif //CHARACTER_H
 zamiast
C/C++
#endif //PLAYER_H
P-53073
« 1 » 2
  Strona 1 z 2 Następna strona