sinoo Temat założony przez niniejszego użytkownika |
» 2012-12-28 16:27:56 To jak mam to poskładać? A może zrobić w ten sposób, że zmienna zadeklarowana w pliku głównym(main.cpp) byłaby dostępna w każdym pliku nagłówkowym... Teoretycznie(patrząc po mojemu) należałoby jedynie stworzyć zmienne globalne w pliku "main.cpp", ale to już próbowałem i coś nie pykło. Właściwie to wywala dużo mniej błędów - sami zobaczcie: 1>------ Build started: Project: SFML_Game1, Configuration: Debug Win32 ------ 1>Compiling... 1>main.cpp 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\events.h(10) : error C2065: 'GameApp' : undeclared identifier 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\events.h(10) : error C2228: left of '.GetEvent' must have class/struct/union 1> type is ''unknown-type'' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\events.h(10) : fatal error C1903: unable to recover from previous error(s); stopping compilation 1>Build log was saved at "file://e:\Documents and Settings\SysOp\Moje dokumenty\Visual Studio 2008\Projects\SFML_Game1\SFML_Game1\Debug\BuildLog.htm" 1>SFML_Game1 - 3 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== Jedyny problem jaki się teraz nasuwa to brak deklaracji dla GameApp w pliku "Events.h", ale nie wiem dlaczego - w innych plikach go nie brakuje(przynajmniej nie wywala błędu informującego o tym). W takim wypadku próbowałem użyć extern sf::RenderWindow GameApp , ale w ten sposób niestety wróciłem znowu do poprzedniej sytuacji(masa tych samych błędów) |
|
DejaVu |
» 2012-12-28 16:40:36 |
|
sinoo Temat założony przez niniejszego użytkownika |
» 2012-12-28 17:29:50 DejaVu - dzięki bo bardzo mi się przydało przy porządkowaniu kodu, ale nic poza tym. Ciąglę mój problem został nierozwiązany. Dla odświeżenia kod wygląda teraz w ten sposób: main.cpp #include <SFML/Graphics.hpp>
sf::RenderWindow GameApp( sf::VideoMode( 800, 600, 32 ), "SFML Untitled aplication" ); Hero hero( 100, 100, true ); Game1 Game; sf::Image img;
img.LoadFromFile( "2.png" );
int main() { Game.onStart(); while( GameApp.IsOpened() ) { GameEvent(); Game.Update(); Game.Draw(); } return 0; }
Game1.h #pragma once #ifndef Game1_h #define Game1_h
#include <SFML/Graphics.hpp>
class Game1 { public: void onStart(); void Update(); void Draw(); void Exit(); };
#endif Game1.cpp #include "Game1.h"
void Game1::onStart() { hero.start( img ); }
void Game1::Update() { }
void Game1::Draw() { GameApp.Clear( sf::Color( 255, 255, 255 ) ); GameApp.Draw( hero.sprite ); GameApp.Display(); }
void Game1::Exit() { GameApp.Close(); } Hero.h #pragma once #ifndef Hero_h #define Hero_h
#include <SFML/Graphics.hpp>
class Hero { int posX; int posY; bool flip; sf::Sprite sprite; float speed; Hero( int PosX, int PosY, bool Flip ) : posX( PosX ) , posY( PosY ) , flip( Flip ) { } public: void start( sf::Image * IMG ); bool Colision(); void Run(); };
#endif Hero.cpp #include "Hero.h"
void Hero::start( sf::Image * IMG ) { sprite.SetImage( IMG ); sprite.SetPosition( posX, posY ); speed = + 1.0; sprite.FlipX( flip ); }
bool Hero::Colision() { return false; }
void Hero::Run() { sprite.Move( speed, 0.0 ); }
Events.h #pragma once #ifndef Events_h #define Events_h
#include <SFML/Graphics.hpp>
sf::Event Event;
void GameEvent();
#endif Events.cpp #include "Events.h"
void GameEvent() { while( GameApp.GetEvent( Event ) ) { if( Event.Type == sf::Event::Closed ) Game.Exit(); if( Event.Key == sf::Key::D ) { if( hero.Colision() == false ) hero.Run(); } } } A oto log z kompilacji: 1>------ Build started: Project: SFML_Game1, Configuration: Debug Win32 ------ 1>Compiling... 1>main.cpp 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(4) : error C2146: syntax error : missing ';' before identifier 'hero' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(4) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(4) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(4) : error C2078: too many initializers 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(5) : error C2146: syntax error : missing ';' before identifier 'Game' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(5) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(5) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(8) : error C2143: syntax error : missing ';' before '.' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(8) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(8) : error C2371: 'img' : redefinition; different basic types 1> e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(6) : see declaration of 'img' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(12) : error C2228: left of '.onStart' must have class/struct/union 1> type is 'int' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(16) : error C3861: 'GameEvent': identifier not found 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(17) : error C2228: left of '.Update' must have class/struct/union 1> type is 'int' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(18) : error C2228: left of '.Draw' must have class/struct/union 1> type is 'int' 1>Hero.cpp 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\hero.cpp(5) : error C2664: 'sf::Sprite::SetImage' : cannot convert parameter 1 from 'sf::Image *' to 'const sf::Image &' 1> Reason: cannot convert from 'sf::Image *' to 'const sf::Image' 1> No constructor could take the source type, or constructor overload resolution was ambiguous 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\hero.cpp(6) : warning C4244: 'argument' : conversion from 'int' to 'float', possible loss of data 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\hero.cpp(6) : warning C4244: 'argument' : conversion from 'int' to 'float', possible loss of data 1>Game1.cpp 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(5) : error C2065: 'hero' : undeclared identifier 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(5) : error C2228: left of '.start' must have class/struct/union 1> type is ''unknown-type'' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(5) : error C2065: 'img' : undeclared identifier 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(14) : error C2065: 'GameApp' : undeclared identifier 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(14) : error C2228: left of '.Clear' must have class/struct/union 1> type is ''unknown-type'' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(15) : error C2065: 'GameApp' : undeclared identifier 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(15) : error C2228: left of '.Draw' must have class/struct/union 1> type is ''unknown-type'' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(15) : error C2065: 'hero' : undeclared identifier 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(15) : error C2228: left of '.sprite' must have class/struct/union 1> type is ''unknown-type'' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(16) : error C2065: 'GameApp' : undeclared identifier 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(16) : error C2228: left of '.Display' must have class/struct/union 1> type is ''unknown-type'' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(21) : error C2065: 'GameApp' : undeclared identifier 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.cpp(21) : error C2228: left of '.Close' must have class/struct/union 1> type is ''unknown-type'' 1>Event.cpp 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\event.cpp(5) : error C2065: 'GameApp' : undeclared identifier 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\event.cpp(5) : error C2228: left of '.GetEvent' must have class/struct/union 1> type is ''unknown-type'' 1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\event.cpp(5) : fatal error C1903: unable to recover from previous error(s); stopping compilation 1>Generating Code... 1>Build log was saved at "file://e:\Documents and Settings\SysOp\Moje dokumenty\Visual Studio 2008\Projects\SFML_Game1\SFML_Game1\Debug\BuildLog.htm" 1>SFML_Game1 - 31 error(s), 2 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== W ten sposób łatwiej ogarnąć kod, ale co do zmiennej dostępnej w każdym pliku, to było w tych wynikach podanych przez DejaVu tyle, by stworzyć globalne, a ja już je mam i błędy dalej są. Starałem się jużto ogarnąć na wiele sposobów, ale widocznie trzeba to rozwiązać w sposób, jakiego jeszcze nie znam. Mam nadzieję, że kto mi wytłumaczy o co chodzi, bo ja już ręce załamuje. |
|
jsc |
» 2012-12-28 18:07:57 I znowu nie załączyłeś swoich bibliotek. |
|
Admixior |
» 2012-12-30 02:20:15 W skrócie nie rozumiesz w jaki sposób kompilator kompiluje jeśli są oddzielne pliki 0. do maina dołącz hero.h 1. do maina dołacz game1.h 2. do... Zlituj się Panie Boże i oszczędź moich oczu. |
img.LoadFromFile( "2.png" ); dlaczego to umieściłeś przed main?? Toż to przecież jest kod wykonywalny, a takie tylko mogą się robić w funkcjach (np. w main). Jak umieściłeś je tak jak teraz to kiedy by miało się to wykonać??? Przy której funkcji? losowej? 3. hero.cpp linia 5 - - funkcja nie może mieć różnych parametrów od deklaracji w klasie (referencja!=adres(wskaźnik)) 4. Do game1.h dołącz hero.h 5. game1.cpp nie wie co to img i GameApp (dowiedz go). Z mojego doświadczenia lepiej przesyłać dane typu adres obrazka i tym bardzie refencja (lub adres) okna przez parametr. W sumie tak później robisz z obrazkiem do klasy hero (tak mieszanie) 6. Dlaczego zdefiniowałeś Event w nagłówku. Unikaj takiego bo późnej 2 razy dołączysz plik i będziesz miał redefinition.Zamiast tego jak już jest potrzebne (a tu nie) dawaj deklaracje a wpliku cpp dawaj definicje. 7. event.cpp nie wie co to gameApp i hero ... 8. #pragma once == #ifndef bla \ #define bla \ \ \ #endif To tyle po krótkiej analizie logów błędu i kodu |
|
1 « 2 » |