SDL(Mehrere Functionen und cpp dateien)
-
kind schrieb:
nicht gleichzeitig, sondern parallel
Was genau das gleiche ist...
-
Hi,
vielen dannk @all.
Gibt es ein Tutorial was das genau erklärt?@Snorre, Tutorials zu SDL hab ich ein paar gute,
aber da sich die Leute dort keine Engine schreiben,
wird auch nicht darauf eingegangen, sie machen alles
direkt im Programmcode.Vielen dank im vorraus.
cu max
-
Das hat ja auch nix mit der SDL zu tun, dass sind C/C++ Grundlagen.
-
Hi,
in C++ hab ich ja auch eine übung zu dem Thema schon davor
gecodet, die ging.In der erstellte ich zwei .cpp files
und includierte sie.
In der main rief ich eine funktion der anderen cpp file auf.
Das ging einwandfrei, also dachte ich das dass in der SDL
auch gehen sollte.Code:Main.cpp
#include <iostream.h> int printfunction(); int main(){ printfunction(); return 0; }
Code:Printfunction.cpp
#include <iostream.h> int printfunction(){ cout << "Es geht also"; return 0; }
Ich denke das ist verkürtzt das was ich in meinem Programm tue
(Bis darauf das ich keine .h files benutze, das sollte aber keine
rolle spielen)cu max
-
Hi,
ist das was ich da gemacht hab vom Prinzip her das selbe?
(Eigentlich ruf ich ja bei meinem anderen proc auch nur functionen
aus der anderen .cpp auf.)
Vielen dank im vorrauscu max
-
Eigentlich ist es das selbe, da du den Prototyp ja vor deiner Funktion deklarierst. Allerdings solltest du schon alleine wegen der Sauberkeit auf Source ( CPP, CC, C ) und Header ( H ) zurückgreifen. Vorallem kannst du ein Headerfile mehrfach includen, während du mit dem Prototyp vor deinem Programm in mehreren Dateien ärger bekommen könntest, wegen "Object multiple defined" oder so.
-
Hi,
hmmm um ganz ehrlich zu sein hab ich noch nie wirklich
mit .h files gearbeitet, weis jetzt auch gar nicht genau
was ich darin alles machen kann, aber ich hab hier genügend literatur
und werd die Lücke stopfen.SnorreDev shrieb:
solltest du schon alleine wegen der Sauberkeit auf Source ( CPP, CC, C ) und Header ( H ) zurückgreifen.Hab ich wohl nicht richtig dazugeschrieben:(so ist es also in echt)
MAIN.cpp
#include <iostream.h> int printfunction(); int main(){ printfunction(); return 0; }
Printfunction.cpp
C/C++ Code: #include <iostream.h> int printfunction(){ cout << "Es geht also"; return 0; }
cu max
-
Hi.
Ist das nun das gleiche?Vielen dank im vorraus.
cu max
-
Hi,
da niemand antwortet, vermute ich jetzt einfach mal dass
meine Theorie ein völliger schwachsinn ist, welcher
nie das Licht des Bildschirms erblicken hätte sollen.
Trotzdem danke.Wäre nett, wenn mir jemand einen Link zu nem Tut oder soetwas
geben könnte.cu max
-
Hi,
hab gegooglet.
http://www.codeworx.org/cpp_tuts_1_5.php
für alle denen Multithreading noch ein Rätsel ist.cu max
-
ich glaubr das problem is, niemand weiß wo eigentlich dein problem liegt.
-
Hi,
ich weiß in Foren drücke ich mich
oft sehr umständlich aus.Mein Problem ist, das der erste code
nicht läuft(angeblich wegen Multithreading)
(Die Fehler sind rausgebügelt)Aber ich bekomme diese
Fehlermeldung:
**--------------------Konfiguration: code - Win32 Debug--------------------
Linker-Vorgang läuft...
code.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct SDL_Surface * screen" (?screen@@3PAUSDL_Surface@@A)
Pyramidal-Engine.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct SDL_Surface * screen" (?screen@@3PAUSDL_Surface@@A)
Debug/code.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.code.exe - 3 Fehler, 0 Warnung(en)
**Obwohl dieser Code auch läuft
MAIN.cpp#include <iostream.h> int printfunction(); int main(){ printfunction(); return 0; }
Printfunction.cpp
#include <iostream.h> int printfunction(){ cout << "Es geht also"; return 0; }
Ich tue ja in beiden Dateien vom Prinzip her dasselbe,
ich rufe eine Function aus einer anderen C++ datei auf,
mit der ich auch davor Prototyping betrieben habe.
Aber es heißt ja, das währe C++ Grundwissen, nun aber
unter C++ läuft es ja.Also, nun langsam dämmert es mir warum es nicht geht
Ich habe den C++ code in einer DOS-Box ausgeführt, der einfacheheit
zur liebe, aber DOS benötigt kein Multithreading, während eine Win32-
Anwendung dies zwingend benötigt.cu max
-
Und wo liegt jetzt genau dein Problem?
Gruß M.
-
Hi,
erstmal um das zu klären:Dr.GreenThumb schrieb:
Das hat ja auch nix mit der SDL zu tun, dass sind C/C++ Grundlagen.17.06.03:HummeSikkins schrieb:
Standard-C++ kennt keine Threads, aber die SDL hat doch eine schöne HP:Ok, also Threading ist kein C++ Grundwissen.
Mein Verständnissfrage hat sich damit nun auch erledigt,
Threading braucht man halt in SDL.cu max
-
Hi,
http://sdldoc.csn.ul.ie/thread.php
da wird´s erklärt, leider einglisch.cu max
-
Du hast wohl die SDL-Library nicht mitgelinkt.
-
Hi,
sdlmain.lib+sdl.lib sind wie immer gelinkt, die
findet er ja auch.Jetzt herrscht bei mir mal wieder absolute verwirrung
In wiefern benötige ich jetzt Threads in meinem Programm?Und nocheinmal, weil ich vielleicht doch zu blöd bin zu
erklären was ich meine. Mit dem ersten code, war natürlich
der Fehlerverbesserte von seite 1 gemeint.(Geb ihn euch nachher)cu max
-
Hi,
hier nun der veränderte code der nur noch drei Fehler verursacht:
(--------------------Konfiguration: code - Win32 Debug--------------------
Linker-Vorgang läuft...
code.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct SDL_Surface * screen" (?screen@@3PAUSDL_Surface@@A)
Pyramidal-Engine.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct SDL_Surface * screen" (?screen@@3PAUSDL_Surface@@A)
Debug/code.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.code.exe - 3 Fehler, 0 Warnung(en) )
Der Code ist in folgende zwei .cpp dateien eingeteilt.
Code.cpp#include <stdlib.h> #include <stdio.h> #include <iostream.h> #include <SDL.h> #include "Pyramidal-Engine-Header.h" //Präprozessor befehle die leider nötig sind damit SDL läuft. #ifdef _WIN32 #undef main #endif void SetDisplayMode(); int ShowBMP(char *file, int x, int y, SDL_Surface *window); //Hauptschleife int main(){ int running; //Das SDL Subsystem SDL_INIT_VIDEO wird in einer if anweisung initialisiert. //Der Befehl SDL_Init() muß in jedem SDL-Programm vor allen anderen SDL-Funktionen aufgerufen werden //Der einzige Parameter gibt an, welche Teile von SDL verwendet werden. Für dieses Beispiel brauchen wir nur den Graphikteil if(SDL_Init(SDL_INIT_VIDEO)<0){ printf("SDL konnte nicht gelade nwerden\n"); } else{ printf("SDL wurde geladen");} //Aufruf der Funktion SetDisplayMode aus der Pyramidial-Engine SetDisplayMode(); //Aufruf der Funktion ShowBMP(Aus der Pyramidial-Engine) ShowBMP("FireWarrior.bmp",10,10,window); //Programmschleife running = 1; while(running==0) { SDL_Event event; while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_KEYDOWN: running = 0; break; case SDL_QUIT: running = 0; break; } } } //Das Gegenstück zu SDL_Init() ist SDL_Quit(). SDL_Quit() muß immer am Ende eines Programms //aufgerufen werden. Ansonsten kann es z.B. vorkommen, daß der Bildschirmmodus nicht richtig //zurückgesetzt wird. Es könnten auch Memoryleaks entstehen, da Speicher nicht ordnungsgemäß //freigegeben wird. //SDL wird aus dem Speicher entfernt atexit(SDL_Quit); //und das laufende programm beendet return 0; }
Pyramidial-Engine.cpp
//Pyramidial-Engine.cpp #include <stdlib.h> #include <stdio.h> #include <iostream.h> #include <SDL.h> #include "Pyramidal-Engine-Header.h" /* screen und running werden später verwendet */ //Pyramidalengine(2D)Teil void SetDisplayMode(){ window=SDL_SetVideoMode(1024,768,32,SDL_FULLSCREEN);//SDL stellt die Auflösung des Bilschirmes auf //1024,768,32 und wechselt in den FULLSCREEN Modus also ins Große Bild(Die konsole ist unsichtbar). if(!window){//If anweisung fals der Bildschirmmodus nicht gesetzt werden kann. printf("Konnte Bildschirmmodus nicht setzen\n"); exit(-1); } } int ShowBMP(char *file, int x, int y, SDL_Surface *window) //statt window { SDL_Surface *bitmap; SDL_Rect dest; /* Eine Abfangen von möglichen Fehler */ if((bitmap=SDL_LoadBMP(file))==NULL) { fprintf(stderr,"Error: %s\n",SDL_GetError()); return -1; } dest.x=x; dest.y=y; dest.w=bitmap->w; dest.h=bitmap->h; SDL_BlitSurface(bitmap,NULL,window,&dest); SDL_UpdateRects(window,1,&dest); return 0; }
Und die Headerdatei Pyramidial-Engine-Header.h
extern SDL_Surface *window;
cu max
-
Hi,
hab nun im WinAPI-Board was gefunden.(Leider WinAPI, aber es gibt auch
ne SDL möglichkeit, blos net so gut erklärt)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_crt__beginthread.2c_._beginthreadex.aspAlso brauch ich nun Threads?
cu max
-
Ich hab' keinerlei Ahnung, was Du noch überhaupt von uns willst...
Hast Du immmer noch Probleme beim Linken!??!
Oder verstehst Du nur "Threads" nicht!??Falls ersteres: Hast Du jetzt multithreaded eingestellt oder nicht?!?