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. |
|
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... ;) |
|
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 . |
|
Revo Temat założony przez niniejszego użytkownika |
» 2013-08-12 10:12:19 Plik Monster.h z "wadliwą" linijką : #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 ); };
|
|
pekfos |
» 2013-08-12 10:18:53 Dołącz creature.h. |
|
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ć ;) |
|
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 : #include "Maps.h"
#include <SFML/Graphics.hpp> #include <SFML/Graphics/Image.hpp> #include <iostream> #include <string> #include <cmath>
Maps.h #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 #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 #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 ); };
Creature.h #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 #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 ) { } };
|
|
megatron |
» 2013-08-12 10:38:32 ponieważ musisz zrobić coś takiego w każdym pliku: #ifndef NAZWA_PLIKU_Z_WIELKICH_LITER_H_INCLUDED #define NAZWA_PLIKU_Z_WIELKICH_LITER_H_INCLUDED
#endif
#@#EDIT#@# zamiast "NAZWA_PLIKU_Z_WIELKICH_LITER" musisz tam wstawić nawę pliku z wielkich liter ;) |
|
« 1 » 2 |