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

Problemy z #include

Ostatnio zmodyfikowano 2016-05-31 12:36
Autor Wiadomość
Blonnik
Temat założony przez niniejszego użytkownika
Problemy z #include
» 2016-05-30 20:55:34
Cześć
Staram się przenieść jedną z gier planszowych na kompa i mam taki oto problem:
Mimo #include "Player.h" klasa Player jest nieznana - error: 'Player' does not name a type.

C/C++
#ifndef WORLD_H
#define WORLD_H

#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>

#include <array>

#include "ResourceHolder.h"
#include "SceneNode.h"
#include "SpriteNode.h"
#include "Player.h"

namespace Textures
{
    enum ID { Backgorund, Gizah };
}


class World
    : private sf::NonCopyable
{
public:
    World( sf::RenderWindow & window );
    void update( sf::Time dt );
    void draw();
private:
    void loadTextures(); //zaladowanie textur  do TetureHolder'a
    void buildScene(); // zbudowanie drzewa priorytetow
private:
    enum Layer { Backgorund, Player, LayerCount }; // kolejne warstwy wyswietlania
private:
    sf::RenderWindow mWindow; //okno renderowania
    sf::View mWorldView; //podglad
    ResourceHolder < sf::Texture, Textures::ID > mTextures; // TextureHolder
    SceneNode mSceneGraph; //korzen drzewa priorytetow
    std::array < SceneNode *, LayerCount > mSceneLayers; //tablica elementow drzewa priorytetow
   
    Player * mPlayer; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
};

#endif // WORLD_H

I klasa Player
C/C++
#ifndef PLAYER_H
#define PLAYER_H

#include <SFML/Graphics.hpp>
#include "Entity.h"
#include "City.h"

/*
KLASA REPREZENTUJE GRACZA
*/

class Player
    : public Entity
{
public:
    Player( City c );
private:
    City mCity;
private:
    virtual void drawCurrent( sf::RenderTarget &, sf::RenderStates ) const;
   
};

#endif // PLAYER_H

Próbowałem dodać deklarację
class Player
 w World , ale nie pomaga.
Gdzieś czytałem o czymś takim jak cmake file w którym ustala się kolejność, ale nie wiele o tym wiem (nic).
Dodaję jeszcze drzewko pokazujące co include'uje co:
http://www.speedyshare.com/xX9b8/graph.png

Jakieś pomysły ? :/
P-148742
michal11
» 2016-05-30 21:13:57
Jak z world.h wyrzucisz
#include "Player.h"
 i dodasz
class Player;
 to nie pomaga ?
P-148745
Blonnik
Temat założony przez niniejszego użytkownika
» 2016-05-30 23:14:28
Nie pomaga
P-148758
pekfos
» 2016-05-30 23:21:12
Podaj cały kod.
P-148759
michal11
» 2016-05-30 23:32:35
Co masz w
#include "City.h"
 ?
P-148760
Blonnik
Temat założony przez niniejszego użytkownika
» 2016-05-31 10:36:53

C/C++
#ifndef CITY_H
#define CITY_H

#include <SFML/Graphics.hpp>

/*
KLASA REPREZENTUJE MIASTO GRACZA
*/
class Player;

class City
{
public:
    City( sf::Texture t );
public:
    friend class Player;
private:
    void draw( sf::RenderTarget & target, sf::RenderStates states ) const;
private:
    sf::Sprite mSprite;
};

#endif // CITY_H
P-148763
darko202
» 2016-05-31 12:36:55
1.
deklaracja zaprzyjaźnienie wygląda np.
https://pl.wikipedia.org/wiki​/Klasa_zaprzyja%C5%BAniona

tzn. jest deklaracja zapowiadająca klasę Player
deklaracja zaprzyjaźnienia, ale nie ma rozwinięcia klasy zdefiniowanej w deklaracji zapowiadającej

skąd kompilator ma ja wziąć ?

wyrzuciłbym tą deklaracje zapowiadająca
a dodał plik nagłówkowy player.h


2.
>>Mimo #include "Player.h" klasa Player jest nieznana - error: 'Player' does not name a type. #ifndef WORLD_H #define WORLD_H #include (...)

Przepraszam, nie doczytałem Twojego pytania.
ale jak gdzieś utkniesz i nie masz czasu to trzeba zacząć jeszcze raz.

a. wymusić przebudowę całego projektu - czasami kompilator upiera się przebudowywać tylko niektóre pliki, które jego zdaniem uległy zmianie.

b. nowy projekt + dodawanie kolejnych klas, ale nie poprzez przenoszenie całych plików

c. niewidoczny znak (czasami gdzieś się pojawia - ot coś nacisnęliśmy) -
 kiedyś miałem podobny problem i coś było inaczej - zrobiłem zgodnie z p. b i problem zniknął
 potem otwierając jakimś innym edytorem i bawiąc się standardami znalazłem ten dodatkowy znak
P-148764
« 1 »
  Strona 1 z 1