<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Pasja Informatyki - Najnowsze z tagiem #include</title>
<link>https://forum.pasja-informatyki.pl/tag/%23include</link>
<description>Powered by Question2Answer</description>
<item>
<title>[C++] Prawidłowe dołączanie plików nagłówkowych</title>
<link>https://forum.pasja-informatyki.pl/210519/c-prawidlowe-dolaczanie-plikow-naglowkowych</link>
<description>Mam klasę podzielony na 2 pliki: klasa.h oraz klasa.cpp&lt;br /&gt;
&lt;br /&gt;
W implementacji metod klasy korzystam z std::cout, std::endl więc dołączyłem nagłówek &amp;lt;iostream&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Czy w pliku nagłówkowym klasa.h muszę dołączyć bibliotekę &amp;lt;iostream&amp;gt; tak samo jak w pliku z metodami klasa.cpp? Jak powinno wyglądać prawidłowe dołączanie plików nagłówkowych tak aby nigdy nie zostały powielone?&lt;br /&gt;
&lt;br /&gt;
Mój plik klasa.h jest zabezpieczony tzw. header guard. Czy jestem bezpieczny przed powielaniem dołączania? Jak wygląda sprawa z bibliotekami systemu?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/210519/c-prawidlowe-dolaczanie-plikow-naglowkowych</guid>
<pubDate>Thu, 29 Dec 2016 12:32:20 +0000</pubDate>
</item>
<item>
<title>wielokrotne występowanie błędu &quot;first defined here&quot;</title>
<link>https://forum.pasja-informatyki.pl/144312/wielokrotne-wystepowanie-bledu-first-defined-here</link>
<description>

&lt;p&gt;Miałem problem z pętlą #include, dlatego zamknąłem klasy GameState i App w jednym pliku (a właściwie dwóch - App.cpp i App.hpp). Istnieje również klasa pochodna od GameState. Przy kompilacji kompilator wyrzuca dużo razy: &quot;first defined here&quot; odnoszący się do App.cpp linia 13.
&lt;br&gt;

&lt;br&gt;
&lt;strong&gt;main.cpp&lt;/strong&gt;
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &quot;App.hpp&quot;

int main()
{
    App app;
    app.loop();

    return 0;
}
&lt;/pre&gt;



&lt;p&gt;&lt;strong&gt;App.hpp&lt;/strong&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:as3;&quot;&gt;
#ifndef APP_HPP_INCLUDED
#define APP_HPP_INCLUDED

#include &amp;lt;stack&amp;gt;

#include &amp;lt;SFML/Graphics.hpp&amp;gt;
#include &amp;lt;SFML/Window.hpp&amp;gt;
#include &amp;lt;SFML/System.hpp&amp;gt;

class GameState;

class App
{
    private:
        std::stack &amp;lt;GameState *&amp;gt; gameStatesStack;

    public:
        sf::RenderWindow window;

        sf::Event event;

        void pushState(GameState* state);
        void popState();
        void changeState(GameState* state);
        GameState* getState();

        void loop();

        App();
        ~App();
};

class GameState
{
    protected:
        App* app;
        int tickCounter;

    public:
        void updateTickCounter() { tickCounter = (tickCounter &amp;gt; 35999 ? 0 : tickCounter+1); };
        virtual void regularUpdate() = 0;
        virtual void handleInput(const float dt) = 0;
        virtual void irregularUpdate(const float dt) = 0;
        virtual void draw(const float dt) = 0;

        GameState(App* app_p) : app(app_p), tickCounter(0) {};
        virtual ~GameState() {};
};

#endif // APP_HPP_INCLUDED
&lt;/pre&gt;



&lt;p&gt;&lt;strong&gt;App.cpp&lt;/strong&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;stack&amp;gt;

#include &amp;lt;SFML/Graphics.hpp&amp;gt;
#include &amp;lt;SFML/Window.hpp&amp;gt;
#include &amp;lt;SFML/System.hpp&amp;gt;

#include &quot;App.hpp&quot;
#include &quot;global.hpp&quot;
#include &quot;GameState.hpp&quot;

void App::pushState(GameState* state)
{
    gameStatesStack.push(state);
}

void App::popState()
{
    delete gameStatesStack.top();
    gameStatesStack.pop();
}

void App::changeState(GameState* state)
{
    this-&amp;gt;popState();
    this-&amp;gt;pushState(state);
}

GameState* App::getState()
{
    if (!gameStatesStack.empty())
        return gameStatesStack.top();
    return nullptr;
}

void App::loop()
{
    float TICK_TIME_IN_MS = 1000 / GLOBAL::CONFIG[&quot;TICKS_PER_SEC&quot;];
    sf::Clock tick_clock;
    sf::Clock dt_clock;
    float dt = 0;


    while(window.isOpen())
    {
        tick_clock.restart();

        this-&amp;gt;getState()-&amp;gt;regularUpdate();

        do
        {
            dt = dt_clock.getElapsedTime().asSeconds();
            dt_clock.restart();

            this-&amp;gt;getState()-&amp;gt;handleInput(dt);
            this-&amp;gt;getState()-&amp;gt;irregularUpdate(dt);
            this-&amp;gt;getState()-&amp;gt;draw(dt);
            window.display();
        }
        while (tick_clock.getElapsedTime().asMilliseconds() + dt &amp;lt; TICK_TIME_IN_MS);

        this-&amp;gt;getState()-&amp;gt;updateTickCounter();
    }
}

App::App()
{
    window.create(sf::VideoMode(GLOBAL::CONFIG[&quot;WINDOW_X&quot;], GLOBAL::CONFIG[&quot;WINDOW_Y&quot;]), &quot;Dark Maze v0.1&quot;, sf::Style::Titlebar | sf::Style::Close );
    window.setVerticalSyncEnabled((bool) GLOBAL::CONFIG[&quot;VSYNC&quot;]);
}

App::~App()
{
    while (! gameStatesStack.empty() )
        this-&amp;gt;popState();
}
&lt;/pre&gt;



&lt;p&gt;&lt;strong&gt;GameStatePlay.hpp&lt;/strong&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:as3;&quot;&gt;
#ifndef GAMESTATEPLAY_HPP_INCLUDED
#define GAMESTATEPLAY_HPP_INCLUDED

#include &quot;App.hpp&quot;
#include &quot;MapManager.hpp&quot;
#include &quot;Player.hpp&quot;

class GameStatePlay: public GameState
{
    private:
        MapManager map_manager;
        Player player;

    public:
        void regularUpdate();
        void handleInput(const float dt);
        void irregularUpdate(const float dt);
        void draw(const float dt);

        GameStatePlay(App* app_p);
        ~GameStatePlay();
};

#endif // GAMESTATEPLAY_HPP_INCLUDED
&lt;/pre&gt;



&lt;p&gt;&lt;strong&gt;GameStatePlay.cpp (skrócony)&lt;/strong&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:as3;&quot;&gt;
#include &amp;lt;iostream&amp;gt;

#include &amp;lt;SFML/Graphics.hpp&amp;gt;
#include &amp;lt;SFML/Window.hpp&amp;gt;
#include &amp;lt;SFML/System.hpp&amp;gt;

#include &quot;GameStatePlay.hpp&quot;
#include &quot;global.hpp&quot;

void GameStatePlay::regularUpdate()
{
    if(tickCounter % 6 == 0)
        player.changeAnimationStage();
}

void GameStatePlay::handleInput(const float dt)
{
    //...
}

void GameStatePlay::irregularUpdate(const float dt)
{
}

void GameStatePlay::draw(const float dt)
{
    this-&amp;gt;app-&amp;gt;window.clear();
    map_manager.render(this-&amp;gt;app-&amp;gt;window);
    player.render(this-&amp;gt;app-&amp;gt;window);
}

GameStatePlay::GameStatePlay(App* app_p) :
    GameState::GameState(app_p),
    map_manager(&quot;map1&quot;)
{
}


GameStatePlay::~GameStatePlay()
{
}
&lt;/pre&gt;



&lt;p&gt;Macie jakieś pomysły jak to rozwiązać?&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;EDIT
&lt;br&gt;
Wkleiłem całą zawartość pliku App.cpp&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/144312/wielokrotne-wystepowanie-bledu-first-defined-here</guid>
<pubDate>Wed, 25 May 2016 14:13:41 +0000</pubDate>
</item>
</channel>
</rss>