PARALLEL REALITIES



  • Hallo,

    ich mache ein Tutorial zu SDL/SDL2
    https://www.parallelrealities.co.uk/tutorials/shooter/shooter2.php#downloads
    (by the way : was haltet ihr davon?)

    und bekomme, auch mit dem vorgebenen Code, den Fehler das eine Redeklarierung passiert ist, in einem SDL file.

    error: redeclaration of ‘SDL_TRUE’
    

    Weiß jemand was da passiert ist?

    Danke
    Lou



  • Kürzestmöglicher Code der den Fehler reproduziert?



  • @Swordfish
    Ich versuch es mal, wenn ich zu Hause bin. Doch die Redeklarierung findet in der SDL library statt. Wie soll ich das Testen?


  • |  Mod

    @Lou-Cyphr3 sagte in PARALLEL REALITIES:

    @Swordfish
    Ich versuch es mal, wenn ich zu Hause bin. Doch die Redeklarierung findet in der SDL library statt. Wie soll ich das Testen?

    Mach erst einmal dein Beispiel. Wenn du das dann hast, dann wird das entweder ein offensichtlicher Fehler bei dir sein (den du dann beheben kannst) oder ein offensichtlicher Fehler in der SDL (den du dann melden kannst).

    Ich sage aber mal voraus, dass die SDL wahrscheinlich keinen Fehler haben wird, der durch reines Include ihrer Header ausgelöst wird. So etwas würde schließlich so ungefähr sofort auffallen.



  • @SeppJ
    Ich gehe auch nicht davon aus, dass SDL da einen Fehler hat. Ich wundere mich nur, weshalb mir stets dieser Fehler gezeigt wird. Oder ist das Tutorial fehlerhaft? Auch wenn ich exakt die src vom Tutorial übernehme, geschieht das Selbe.



  • @Swordfish sagte in PARALLEL REALITIES:

    Kürzestmöglicher Code der den Fehler reproduziert?


  • |  Mod

    @Lou-Cyphr3 sagte in PARALLEL REALITIES:

    @SeppJ
    Ich gehe auch nicht davon aus, dass SDL da einen Fehler hat. Ich wundere mich nur, weshalb mir stets dieser Fehler gezeigt wird. Oder ist das Tutorial fehlerhaft? Auch wenn ich exakt die src vom Tutorial übernehme, geschieht das Selbe.

    Irgendwelcher Code im Internet kann schon oft
    a) Schlicht falsch
    b) Veraltet
    c) Unvollständig
    d) Mehreres davon
    sein.

    Ansonsten Verweis auf das, was Swordfish gesagt hat. Ich mag gerade nicht irgendwelche komplexen Codebeispiele mit vielen Abhängigkeiten debuggen, da musst du schon etwas Vorarbeit leisten 🙂



  • @SeppJ sagte in PARALLEL REALITIES:

    Ich mag gerade nicht irgendwelche komplexen Codebeispiele mit vielen Abhängigkeiten debuggen,

    Das.

    Und vor allem mag ich mir nicht aus einem mehrseitigem Tutorial zusammenraten müssen, was da vielleicht kopiert worden ist und was nicht und wie das fertige Ding konkret wirklich aussieht. Es ist Aufgabe des Fragestellers es potentiellen Antwortgebern möglich zu machen auf eine Frage zu Antworten. Sonst ~> Pech.

    Und wenn jemand C oder C++ halbwegs kann und eine IDE bedienen kann, sollte es auch möglich sein selbst darauf zu kommen was falschläuft oder zumindest in der Lage sein eine viel konkretere Frage zu stellen. Und wenn C oder C++ nicht zumindest in einer soliden Basis "sitzt" dann ist ein Tutorial zu OpenGL sowieso Quatsch.



  • @Swordfish Ich bin ganz deiner Meinung. Allerdings denke ich, dass ich sicher noch viel lernen muss, aber die Basics sitzen. Allerdings bin ich was die IDE geht, nicht besonders vertraut, da ich gerade viel probiere. Dazu die erste konkrete und generelle Frage :
    Linkt die IDE nicht automatisch? Denn ein Problem was ich hatte, entstand daraus, dass Funktionen aus den Headern nicht erkannt wurden und ich sie jetzt per prototyp der Main bekannt gemacht habe.

    Desweiteren nutzt der Autor des Tutorials eine scheinbare Klasse names player, die der Compiler aber als unbekannt erkennt. Ist sie Teil der SDL?
    (by the way : bin ich bei der zweiten Episode des 1. Tutorials "shoot 'em up"

    #include "main.h"
    
    int main(int argc, char *argv[])
    {
    	memset(&app, 0, sizeof(App));
    	memset(&player, 0, sizeof(Entity));
    	
    	initSDL();
    	
    	player.x = 100;
    	player.y = 100;
    	player.texture = loadTexture("gfx/player.png");
    	
    	atexit(cleanup);
    	
    	while (1)
    	{
    		prepareScene();
    		
    		doInput();
    		
    		blit(player.texture, player.x, player.y);
    		
    		presentScene();
    		
    		SDL_Delay(16);
    	}
    
    	return 0;
    }
    


  • Die IDE macht (üblicherweise) genau das, was du ihr sagst. Wenn du ihr sagst, was du gelinkt haben willst, dann linkt sie es dir auch.
    Was für eine IDE nutzt du denn?

    player ist keine Klasse, player ist ein Objekt der Klasse Entity.
    Was genau machst du denn? Was für Tools nutzt du? Hast du auch main.h und alle anderen Dateien, die in dem herunterladbaren Archiv sind, im richtigen Verzeichnis liegen? Wie kompiliert deine IDE (es gibt üblicherweise einen Tab namens "Console" oder so etwas)? Hast du schon probiert, das per Hand zu kompilieren (auch eine sehr gute Übung)? Da liegt nämlich auch ein Makefile herum.



  • @Lou-Cyphr3 sagte in PARALLEL REALITIES:

    #include "main.h"
    

    Da drin ist dein problem.



  • @Unterfliege
    Meine Frage ist ob die IDE by default linkt? Ich habe alle relevanten files in einem projekt abgespeichert und gehe davon aus, dass es gelinkt wird. Weshalb muss ich der main dann noch die Funktionen bekannt machen? Ich benutze zur Zeit den QT Creator (lustigerweise hattest du mir diesen damals empfohlen) als IDE und zuvor viel mit Atom und bisschen mit Code::Blocks(CB find ich aber irgendwie Scheiße). Ich weiß jetzt nicht was du speziell mit Tools meinst? Keine?
    Ich hab in der Uni mal von Hand gelinkt und kompiliert, bin aber der Meinung das die IDE dies für mich machen sollte.

    @Swordfish Was genau meinst du? die extern Funktionen?

    Was ist eigentlich der Unterschied zwischen einer Struktur und einer Klasse? Ich möchte die von Autor geschriebenen Structs in Klassen umschreiben. haltet ihr dies für sinnvoll?

    Danke



  • @Lou-Cyphr3 Die IDE linkt by default nichts (außer eben die Standard Lib, die sowieso standardmäßig gelinkt werden).
    Die IDE macht aber letztendlich sowieso nichts anderes als Befehle in einer Konsole ausführen. Und man sollte definitiv wissen, was die IDE da im Hintergrund macht, um auch zu wissen, woran es im Zweifelsfall scheitert.
    Mit Tools meine ich z.B. make, cmake oder qmake. LIBs, die du linken willst, gibst du am Besten nämlich immer in den entsprechenden Steuerungsdateien an. Ansonsten kannst du das aber natürlich auch in der IDE machen, im QtCreator müsste das unter Options > Kits gehen (vermute ich zumindest, ich schreibe die Libs immer in die make/cmake/qmake Datei).

    Der Schwertfisch meint, dass in main.h eigentlich alles wichtige steht.
    Ich habe aber gerade auch noch einmal einen Blick hineingeworfen: es ist noch schlimmer als gedacht. Da werden einfach globale Variablen definiert (nicht nur deklariert) und include guards fehlen in sämltichen Headern.
    Fazit: schmeiß das Tutorial weg.

    Zu struct vs. class: Der einzige Unterschied ist der default Sichtbarkeitsbereich. struct ist by default public und class by default private.
    Weiterer Unterschied: class gibt es nur in C++. Dir ist klar, dass du da ein C-Tutorial machst, oder?



  • @Lou-Cyphr3 sagte in PARALLEL REALITIES:

    haltet ihr dies für sinnvoll?

    Ich würde es für sinnvoll halten wenn Du zuerst die Sprache beherrschen lernen würdest bevor Du mit irgendwelchen libraries rumspielst.



  • @Unterfliege
    Okay danke! Kennst du irgendein SDL2/ SDL Tutorial was gut ist?

    @Swordfish

    Ich weiß ja nicht wie dogmatisch du an die Sache rangehst, aber für mich ist lernen nicht nur Bücher wälzen sondern auch probieren. Und da als nächstes OOP dran ist, denke ich ein Tutorial welchen entfernt auch Klassen nutzt, ist eine gute Übung und zum lernen geeingnet. Ich hab ja immer noch den C++Programmierer als Nachschlagewerk. Ich will ja kein Riesenprojekt kommerzialisieren.
    Dann antworte halt nicht, wenn es dir nicht passt.



  • @Lou-Cyphr3 ich kenne mich mit SDL leider nicht aus. Aber erfahrungsgemäß kann man sagen, dass allgemein die meisten Tutorials üblicherweise nur zum Reinschnuppern taugen. Vor allem was C++ angeht ist ein Großteil einfach mangelhaft bis ungenügend.
    Der Schwertfisch hat schon auch recht damit, dass du dir zumindest die Grundlagen aneignen solltest, bevor du irgendetwas abseits vom C++-Standard anfasst. Und Objektorientierung gehört auf jeden Fall zu den absoluten Grundlagen, die du auch für fast jedes Framework und jede externe Library brauchen wirst - außer du wählst eben reine C-Libs, wovon ich aber vor allem für den Anfang dringend abraten würde, da du dir dadurch einen unglaublich schlechten Stil angewöhnen wirst, der dir im Nachhinein noch viel Ärger bescheren wird.
    Es geht ja auch gar nicht darum, dass du nur Bücher lesen sollst - du solltest auf jeden Fall auch abseits davon experimentieren. Aber bis du die Grundlagen wirklich sicher kannst, solltest du die Finger von allem Graphischen lassen - du kannst auch ohne GUI viel Spaß haben und irgendwann wird dir das Backend wohl auch mehr Spaß machen als das Frontend, einfach weil es spannender und abwechslungsreicher ist.
    Ich verstehe, dass du gerne etwas Graphisches machen willst, aber letztendlich tust du dir damit wohl keinen Gefallen. Ich würde dir empfehlen, den C++ Programmierer, nachdem du ihn schon hast, bis zu dem Kapitel mit Qt/GUI durchzuarbeiten und parallel eben in kleinen Konsolenprogrammen in z.B. textbasierten Spielen das Wissen auszuprobieren. Das Wissen davor ist definitiv grundlegend für alles zum Thema Grafik.
    Kapitel, die du, wenn du schnell mit Grafik anfangen willst, zunächst überspringen kannst, sind: Dateien und Ströme (allerdings für die Formatierung deiner Konsolenprogramme relevant), Performance, Wert- und Referenzsemantik (allerdings so bald wie möglich nachholen) und reguläre Ausdrücke. Alles andere ist meiner Meinung nach zu essentiell für GUIs, um es zu überspringen.
    Wenn du dann soweit bist, solltest du eigentlich jede beliebige Grafik-Lib nehmen können. Ich kenne eigentlich fast nur Qt und kann es durchaus empfehlen, das ist aber nicht primär für Spiele, etc. sondern für "richtige" Anwendungen - Spiele sind damit aber natürlich trotzdem möglich. Du kannst dann aber natürlich auch noch einmal hier im Forum nachfragen.


Anmelden zum Antworten