Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

1

11.03.2013, 21:21

Fehler bei einer SDL Anwendung

Ich programmier grad ne kleine Anwendung und erhalte folgenden Fehler:

1>MSVCRTD.lib(cinitexe.obj) : warning LNK4098: Standardbibliothek "msvcrt.lib" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: int __thiscall CGame::Init(void)" (?Init@CGame@@QAEHXZ)" in Funktion "_SDL_main".
1>d:\admin\documents\visual studio 2010\Projects\SDG_Engine 2\Debug\SDG_Engine 2.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.

Quellcodedatei ist angehängt ( Hab es als .txt als Download damit die Datei nicht zu groß ist )

Die main.cpp hat nicht mehr reingepasst( und sorry das sie so grausam aussieht die Website hat das so formatiert
:wacko:
):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
// MAIN_CPP#include "Framework.hpp"#include "Game.hpp"

int main (int argc, char *argv[]){  // Framework initialisieren if (g_pFramework->Init (800, 600, 16, false) == false)  {    getchar (); return (0); }  // Neue Instanz des Spiels  CGame Game;
    Game.Init ();
    // Spiel laufen lassen. Diese Funktion läuft so lange, // bis das Spiel geschlossen oder die Escape-Taste  // gedrückt wird   Game.Run ();
    // Spiel beenden    Game.Quit ();
    // Framework beenden    g_pFramework->Quit ();  g_pFramework->Del ();
    exit (1);
    return (0);
}



Danke für die Hilfe schon mal im vor raus
und bitte verzeiht wenn ich heute einfach zu blöd bin den Fehler selber zu finden :dash:
»Swoerm« hat folgende Dateien angehängt:
  • Framework(cpp).txt (2,46 kB - 62 mal heruntergeladen - zuletzt: 15.04.2024, 05:29)
  • Framework(hpp).txt (677 Byte - 76 mal heruntergeladen - zuletzt: 01.05.2024, 12:39)
  • Game(cpp).txt (688 Byte - 57 mal heruntergeladen - zuletzt: 21.04.2024, 07:21)
  • Game(hpp).txt (688 Byte - 42 mal heruntergeladen - zuletzt: 25.04.2024, 20:06)
  • Singleton(hpp).txt (1,01 kB - 52 mal heruntergeladen - zuletzt: 25.04.2024, 23:06)

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

2

11.03.2013, 21:37

Einfach unter Projekteinstellungen/Linker/Eingabe: Mnuepunkt: Alle Standardbibliotheken ignorieren "Ja /NODEFAULTLIB" auswählen.

Durza

Treue Seele

Beiträge: 104

Beruf: Student (MSc Cyber Security)

  • Private Nachricht senden

3

11.03.2013, 22:25

Das sollte aber eig. den unaufgelösten Verweis auch nicht beheben.
Überprüfe einmal deine Verweise (Alle .lib Dateien eingebunden? -> SDL.lib, SDLmain.lib)

Durza

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

12.03.2013, 06:42

Er hat vergessen die Methode "CGame::Init" zu implementieren. Steht doch da.

Verweis auf nicht aufgelöstes externes Symbol ""public: int __thiscall CGame::Init(void)"

Sie steht in Game.cpp und in Game.hpp als Prototyp, wird aber nirgends definiert. Übrigens steht in Game.cpp und Game.hpp dasselbe. Das kann so nicht funktionieren. Selbst wenn es nur falsch hochgeladen wurde, die Init()-Methode ist nicht definiert, so oder so.

Also Jungs, Eure Hilfe is ja nett gemeint, aber Ihr solltet schon erst einmal die Fehlermeldung lesen, bevor Ihr wild spekulierende Tipps gebt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (12.03.2013, 06:59)


5

12.03.2013, 14:51

BlueCobold, auf das zweite bin ich nicht eingegangen, da ich mit dem Smartphone online war und dachte jemand anders könnte es ihm erklären, und bei ihm ist es ein Linker fehler und er steht in Konflikt mit mscvrt somit sind unsere beiden anwtroten richtig. Das ich keine Lust hatte mir die Textdateien runterzuladen und den ganzen Code zu analysieren ist ja wohl eher verständlich. Was bei ihm im Code abgeht weiß ich nicht aber meine Antwort als auch die Antwort von Durza sind aber korrekt. :)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

12.03.2013, 16:38

Das ist so nicht richtig Farmär. Du hast ihm erklärt wie er seine Warning beheben kann. Auf Fehler bist du nicht eingegangen;) Ist ja auch ok. Das was Durza geschrieben hat ist nicht korrekt. Er hat vermutet, dass eine SLD Lib nicht eingebunden wurde, was hier aber nicht der Fall ist. Und BlueCobold hat auch recht, sodass man den Code eigentlich nicht unbedingt laden muss. Der Fehler sagt aus, dass die Implementierung von Init der Klasse CGame fehlt. Hier kann es jetzt verschiedene Möglichkeiten geben, warum der Fehler auftritt. Oft wird die Klasse vor dem Mothodennamen vergessen. Dann wird sowas wie:

C-/C++-Quelltext

1
2
3
4
void Init()
{
...
}

geschrieben, anstatt:

C-/C++-Quelltext

1
2
3
4
void CGame::Init()
{
...
}

Das ist natürlich nur eine Möglichkeit woran das liegen kann. Man kann die Implementierung natürlich auch einfach schlicht vergessen, so wie es hier wohl der Fall ist.
BlueCobold hatte mit seiner Aussage also schon recht.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

7

12.03.2013, 16:44

Okay, aber meistens sind es dann doch linker fehler :)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

12.03.2013, 16:50

Deswegen kann man ja auf den Namen der Funktion achten. Da es sich bei CGame und dessen Methode Init aber um selbstgeschriebenes aus der selben Assembly handelt ist hier kein klassischer Linkerfehler wie Durza ihn meinte vorhanden.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

9

12.03.2013, 18:43

Danke an alle! :thumbsup:
Ich war echt zu blöd den Fehler zu sehen.
Schorsch hat vollkommen recht man muss vor Init () nur CGame:: hinschreiben.
Hatte eigentlich alles vorher überprüft...
Menschen machen nun mal Fehler und ich ganz besonders... :dash:
Ich kann euch nur nochmal danken :D

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

12.03.2013, 19:22

Okay, aber meistens sind es dann doch linker fehler :)

Der Fehler war ja auch ein Linker-Fehler. Ändert aber nichts daran, dass es mit der Lib nichts zu tun hatte.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige