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

Zmienna dostępna w każdym pliku nagłówkowym

Ostatnio zmodyfikowano 2012-12-09 21:02
Autor Wiadomość
sinoo
Temat założony przez niniejszego użytkownika
Zmienna dostępna w każdym pliku nagłówkowym
» 2012-12-08 22:36:26
Witam,
moje pytanie - jak w temacie - jak stworzyć zmienną, aby była dostępna w każdym pliku nagłówkowym? Próbowałem już stworzyć globalną w jednym z plików nagłówkowych, ale taka zmienna jest dostępna jedynie w tym samym jednym pliku nagłówkowym i pliku głównym(*.cpp).
P-70603
Mrovqa
» 2012-12-08 22:38:56
C/C++
// xxx.h
extern int var;

// gash.h
extern int var;

// xxx.cpp
int var = 69;
Musisz ją zdefiniować w jednym z plików *.cpp (tylko tam możesz zmienną inicjalizować!), a w plikach nagłówkowych zamieszczasz tylko deklaracje zmiennych.
P-70604
sinoo
Temat założony przez niniejszego użytkownika
» 2012-12-08 22:52:29
Jeżeli chodzi o użycie w kilku plikach nagłówkowych to działa, ale wywala mi takie dziwne błędy:
1>------ Build started: Project: SFML_Game1, Configuration: Debug Win32 ------
1>  main.cpp
1>main.obj : error LNK2001: unresolved external symbol "class sf::RenderWindow GameApp" (?GameApp@@3VRenderWindow@sf@@A)
1>E:\Documents and Settings\SysOp\Moje dokumenty\Visual Studio 2010\Projects\SFML_Game1\Debug\SFML_Game1.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
 

extern
 użyłem właśnie do
sf::RenderWindow GameApp

Dla rozjaśnienia oto kod:
C/C++
//main.cpp

#include <SFML/Graphics.hpp>

#include "Game1.h"
#include "Events.h"

int main()
{
    sf::RenderWindow GameApp( sf::VideoMode( 800, 600, 32 ), "SFML Game1" );
    Game1 Game;
    Game.onStart();
   
    while( GameApp.IsOpened() )
    {
        GameEvent();
        Game.Update();
        Game.Draw();
    }
    return 0;
}


//Game1.h

#ifndef Game1_h
#define Game1_h

#include <SFML\Graphics.hpp>
#include "Events.h"

extern sf::RenderWindow GameApp;

class Game1
{
public:
    void onStart()
    {
       
    }
   
    void Update()
    {
       
    }
   
    void Draw()
    {
        GameApp.Clear();
        GameApp.Display();
    }
   
    void Exit()
    {
       
    }
};

#endif


//Events.h

#ifndef Events_h
#define Events_h

#include <SFML/Graphics.hpp>
#include "Game1.h"

sf::Event Event;
extern sf::RenderWindow GameApp;

void GameEvent()
{
    while( GameApp.GetEvent( Event ) )
    {
        if( Event.Type == sf::Event::Closed )
             GameApp.Close();
       
    }
}

#endif
P-70607
Mrovqa
» 2012-12-09 14:25:45
Zauważ, iż
sf::RenderWindow GameApp
 nie jest zmienna globalną.
P-70613
sinoo
Temat założony przez niniejszego użytkownika
» 2012-12-09 15:28:58
Wstawiłem zmienną
sf::RenderWindow GameApp
 oraz
Game1 Game
 jako zmienną globalną w ten sposób:
C/C++
#include <SFML/Graphics.hpp>

#include "Game1.h"
#include "Events.h"

sf::RenderWindow GameApp( sf::VideoMode( 800, 600, 32 ), "SFML Game1" );
Game1 Game;

int main()
{
    Game.onStart();
   
    while( GameApp.IsOpened() )
    {
        GameEvent();
        Game.Update();
        Game.Draw();
    }
    return 0;
}

i wywala błędy:

1>------ Build started: Project: SFML_Game1, Configuration: Debug Win32 ------
1>  main.cpp
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2010\projects\sfml_game1\sfml_game1\events.h(9): error C2146: syntax error : missing ';' before identifier 'Game'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2010\projects\sfml_game1\sfml_game1\events.h(9): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2010\projects\sfml_game1\sfml_game1\events.h(9): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2010\projects\sfml_game1\sfml_game1\events.h(16): error C2228: left of '.Exit' must have class/struct/union
1>          type is 'int'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2010\projects\sfml_game1\sfml_game1\main.cpp(7): error C2146: syntax error : missing ';' before identifier 'Game'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2010\projects\sfml_game1\sfml_game1\main.cpp(7): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2010\projects\sfml_game1\sfml_game1\main.cpp(7): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2010\projects\sfml_game1\sfml_game1\main.cpp(7): error C2086: 'int Game' : redefinition
1>          e:\documents and settings\sysop\moje dokumenty\visual studio 2010\projects\sfml_game1\sfml_game1\events.h(9) : see declaration of 'Game'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2010\projects\sfml_game1\sfml_game1\main.cpp(11): error C2228: left of '.onStart' must have class/struct/union
1>          type is 'int'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2010\projects\sfml_game1\sfml_game1\main.cpp(16): error C2228: left of '.Update' must have class/struct/union
1>          type is 'int'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2010\projects\sfml_game1\sfml_game1\main.cpp(17): error C2228: left of '.Draw' must have class/struct/union
1>          type is 'int'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Nie mam pojęcia o co chodzi.
P-70616
Admixior
» 2012-12-09 15:50:27
Zrąbałeś coś w pliku events.h (wystarczy przeczytać po ludzku logi).
Nie wstawiłeś gdzieś średnika... (być może po definicji klasy, ale nie wiem w każdym bądź razie) brak średnika jest gdzieś tuż przed linijką z błędem (kliknij 2 razy na pierwszy błąd)
P-70618
sinoo
Temat założony przez niniejszego użytkownika
» 2012-12-09 21:02:35
Nic nie zwaliłem - jeżeli chodzi o średnik. Na pewno nie brakuje go nigdzie. Z resztą sprawdź sam - wysłałem wcześniej cały kod(plik *.cpp i pliki nagłówkowe).
P-70669
« 1 »
  Strona 1 z 1