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

[C++] Includy, Deklaracje

Ostatnio zmodyfikowano 2013-08-12 10:55
Autor Wiadomość
Revo
Temat założony przez niniejszego użytkownika
[C++] Includy, Deklaracje
» 2013-08-12 01:01:09
Witam. Posiadam 4 pliki - main.cpp, Monsters.h, Player.h i Creature.h W każdym z plików .h jest deklaracja klasy o takiej samej nazwie jak nazwa pliku. Więc tak - Monsters i Player dziedziczą publicznie klasę Creature, w pliku main.cpp są następujące includy : Creature.h, Monsters.h i Player.h i przy próbie kompilacji dostaję error :


C:\Users\Igor\Desktop\SFML Gra\Monsters.h|4|error: expected class-name before '{' token|
C:\Users\Igor\Desktop\SFML Gra\Monsters.cpp||In constructor 'Monsters::Monsters(sf::Texture*, float, float, std::string, float, float, float, float)':|
C:\Users\Igor\Desktop\SFML Gra\Monsters.cpp|3|error: class 'Monsters' does not have any field named 'Creature'|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 2 seconds) ===|

Dlaczego błąd wyskakuje tylko w pliku Monsters a nie w Monsters i Player ?? Deklaracja Creature jest znana przecież obu tym klasom.
P-90062
megatron
» 2013-08-12 09:05:11
Gdybyś pokazał kod pliku w którym kompilator pokazuje błąd, było by nam łatwiej w znalezieniu  tego błędu
Sry za powtórzenia... ;)
P-90064
domin568
» 2013-08-12 09:36:49
|error: expected class-name before '{' - zapomniałeś chyba napisać nazwę klasy
Monsters::Monsters(sf::Texture*, float, float, std::string, float, float, float, float)' - staraj się nie pisać takiego długiego konstruktora , zamiast ostatnich 4 float napisz sf::Vector2f SFML poradzi sobie z tym lepiej , btw dodaj kod bo nie wiemy o co chodzi .
P-90066
Revo
Temat założony przez niniejszego użytkownika
» 2013-08-12 10:12:19
Plik Monster.h z "wadliwą" linijką :

C/C++
#include <SFML/Graphics.hpp>

class Monsters
    : public Creature
{ // <- tutaj pokazuje błąd
   
   
public:
    Monsters( sf::Texture * TextureCreature, float CreaturePosX, float CreaturePosY, std::string CreatureName, float CreatureHealth, float CreatureSpeed, float CreatureAttSpeed, float CreatureDamage );
};
P-90068
pekfos
» 2013-08-12 10:18:53
Dołącz creature.h.
P-90069
megatron
» 2013-08-12 10:28:22
klasa Monsters nie zna klasy Creature ponieważ nie zainkludowałeś pliku Creature.hpp więc nie może z niej dziedziczyć ;)
P-90071
Revo
Temat założony przez niniejszego użytkownika
» 2013-08-12 10:33:37
Jak sobie tworzę taką sytuację w nowym projekcie to wszystko działa ... ;P Ok, jeszcze raz: Więc w pliku main.cpp mam zaincludowane Maps.h w którym znajdują się includy pozostałych plików.

//ps. Do Pana na górze : Jak dołączę do Monster.h Creature.h to wyskakuję mi taki błąd :


C:\Users\Igor\Desktop\SFML Gra\HealthBar.h|3|error: redefinition of 'class HealthBar'|
C:\Users\Igor\Desktop\SFML Gra\HealthBar.h|3|error: previous definition of 'class HealthBar'|
C:\Users\Igor\Desktop\SFML Gra\Position.h|3|error: redefinition of 'class CreaturePos'|
C:\Users\Igor\Desktop\SFML Gra\Position.h|3|error: previous definition of 'class CreaturePos'|
C:\Users\Igor\Desktop\SFML Gra\Position.h|10|error: redefinition of 'class CreatureHRBPos'|
C:\Users\Igor\Desktop\SFML Gra\Position.h|10|error: previous definition of 'class CreatureHRBPos'|
C:\Users\Igor\Desktop\SFML Gra\Creature.h|6|error: redefinition of 'class Creature'|
C:\Users\Igor\Desktop\SFML Gra\Creature.h|6|error: previous definition of 'class Creature'|
||=== Build finished: 8 errors, 0 warnings (0 minutes, 0 seconds) ===|

 

main.cpp Tylko fragment :

C/C++
#include "Maps.h"

#include <SFML/Graphics.hpp>
#include <SFML/Graphics/Image.hpp>
#include <iostream>
#include <string>
#include <cmath>

Maps.h

C/C++
#include <vector>
#include <SFML/Graphics.hpp>
#include "Creature.h"
#include "Monsters.h"
#include "Player.h"
#include "Bonus.h"

class Maps
{
    std::vector < Monsters > MapMonster;
    std::vector < Bonus > MapBonus;
   
public:
    sf::RenderWindow window;
    void AddMonsterToMap( Monsters monster );
    void AddBonusToMap( Bonus bonus );
    void DrawMonster();
    void DrawBonus();
   
};

Monster.h

C/C++
#include <SFML/Graphics.hpp>

class Monsters
    : public Creature
{
   
   
public:
    Monsters( sf::Texture * TextureCreature, float CreaturePosX, float CreaturePosY, std::string CreatureName, float CreatureHealth, float CreatureSpeed, float CreatureAttSpeed, float CreatureDamage );
};

Player.h
C/C++
#include <string>

class Player
    : public Creature
{
private:
    float MBposX, MBposY;
    sf::Sprite MBSprite;
   
    float MRposX, MRposY;
    sf::Sprite MRSprite;
   
public:
    Player( sf::Texture * TextureCreature, float CreaturePosX, float CreaturePosY, std::string CreatureName, float CreatureHealth, float CreatureSpeed, float CreatureAttSpeed, float CreatureDamage );
    // void Fire();
   
};

Creature.h

C/C++
#include "HealthBar.h"
#include "Position.h"
#include <string>


class Creature
{
private:
    std::string Name;
    float NamePositionX, NamePositionY;
   
    HealthBar healthbar;
   
    std::string Dmg;
    float DmgPositionX, DmgPositionY;
   
    sf::Sprite CreatureSprite;
   
    float PosX, PosY;
   
    float HealthMax, HealthNow;
   
    float Speed, AttackSpeed, Damage;
   
public:
    Creature( sf::Texture * TextureCreature, float CreaturePosX, float CreaturePosY, std::string CreatureName, float CreatureHealth = 200, float CreatureSpeed = 5, float CreatureAttSpeed = 1000, float CreatureDamage = 5 );
    std::string GetCreatureName() { return Name; }
    float GetCreatureHealthMax() { return HealthMax; }
    float GetCreatureHealth() { return HealthNow; }
    CreaturePos GetCreaturePos() { return CreaturePos( PosX, PosY ); }
    CreatureHRBPos GetCreatureHRBPos() { return CreatureHRBPos( healthbar.HRposX, healthbar.HRposY, healthbar.HBposX, healthbar.HBposY ); }
    void ChangePos( float x, float y ) { PosX = PosX - x; PosY = PosY - y; }
    void ChangeHealth( float dmg ) { HealthNow = HealthNow - dmg; }
    sf::Sprite GetCreatureSprite() { return CreatureSprite; }
    sf::Sprite GetCreatureHRSprite() { return healthbar.HRSprite; }
    sf::Sprite GetCreatureHBSprite() { return healthbar.HBSprite; }
   
};

HealthBar.h oraz Position.h z pliku Creature.h
C/C++
#include <SFML/Graphics.hpp>

class HealthBar
{
public:
    float HBposX;
    float HBposY;
    sf::Sprite HBSprite;
   
    float HRposX;
    float HRposY;
    sf::Sprite HRSprite;
   
};

class CreaturePos
{
public:
    float PosX, PosY;
    CreaturePos( float x, float y )
        : PosX( x )
        , PosY( y )
    { }
};

class CreatureHRBPos
{
public:
    float HRPosX, HRPosY, HBPosX, HBPosY;
    CreatureHRBPos( float hrx, float hry, float hbx, float hby )
        : HRPosX( hrx )
        , HRPosY( hry )
        , HBPosX( hbx )
        , HBPosY( hby )
    { }
};
P-90072
megatron
» 2013-08-12 10:38:32
ponieważ musisz zrobić coś takiego w każdym pliku:
C/C++
///za początku pliku *.h
#ifndef NAZWA_PLIKU_Z_WIELKICH_LITER_H_INCLUDED
#define NAZWA_PLIKU_Z_WIELKICH_LITER_H_INCLUDED


/// na koncu pliku *.h
#endif

#@#EDIT#@#

zamiast "NAZWA_PLIKU_Z_WIELKICH_LITER" musisz tam wstawić nawę pliku z wielkich liter ;)
P-90073
« 1 » 2
  Strona 1 z 2 Następna strona