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

Anonymous

unregistriert

1

01.03.2006, 23:02

Problem mit Logfile Klasse in Kapitel 8

Hallo

ich habe nun die gesamte Logfile Klasse abgetippt. Als ich sie dann zum ersten mal einsetzen wollte kommt beim kompilieren folgende fehlermeldung:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
------ Erstellen gestartet: Projekt: Listing 8_15, Konfiguration: Debug Win32 ------
Verknüpfen...
Listing 8_15.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall CLogfile::FunctionResult(char const *,bool)" (?FunctionResult@CLogfile@@QAEXPBD_N@Z)" in Funktion "_main".
Listing 8_15.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __cdecl CLogfile::fTextout(int,bool,char const *,...)" (?fTextout@CLogfile@@QAAXH_NPBDZZ)" in Funktion "_main".
Listing 8_15.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __cdecl CLogfile::fTextout(int,char const *,...)" (?fTextout@CLogfile@@QAAXHPBDZZ)" in Funktion "_main".
Listing 8_15.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __cdecl CLogfile::fTextout(char const *,...)" (?fTextout@CLogfile@@QAAXPBDZZ)" in Funktion "_main".
Listing 8_15.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall CLogfile::Textout(int,char const *)" (?Textout@CLogfile@@QAEXHPBD@Z)" in Funktion "_main".
Listing 8_15.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall CLogfile::Textout(char const *)" (?Textout@CLogfile@@QAEXPBD@Z)" in Funktion "_main".
Listing 8_15.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall CLogfile::WriteTopic(char const *,int)" (?WriteTopic@CLogfile@@QAEXPBDH@Z)" in Funktion "_main".
Listing 8_15.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall CLogfile::CreateLogfile(char const *)" (?CreateLogfile@CLogfile@@QAEXPBD@Z)" in Funktion "_main".
Listing 8_15.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CLogfile::CLogfile(void)" (??0CLogfile@@QAE@XZ)" in Funktion ""public: static class CLogfile * __cdecl TSingleton<class CLogfile>::Get(void)" (?Get@?$TSingleton@VCLogfile@@@@SAPAVCLogfile@@XZ)".
F:\Eigene Dateien\Visual Studio 2005\Projects\Listing 8_15\Debug\Listing 8_15.exe : fatal error LNK1120: 9 nicht aufgelöste externe Verweise.
Das Buildprotokoll wurde unter "file://f:\Eigene Dateien\Visual Studio 2005\Projects\Listing 8_15\Debug\BuildLog.htm" gespeichert.
Listing 8_15 - 10 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


mir ist inzwischen klar, was diese Fehlermeldung bedeutet, jedoch habe ich alles richtig eingebunden. Ich hab auch inzwischen den Quelltext von der CD in die Dateien Singletons.hpp, Logfile.hpp, Logfile.cpp und Listing 8_11.cpp reinkopiert, also alle, die verwendet werden, jedoch kommt immer noch diese Fehlermeldung.

Kann es vielleicht daran liegen, dass ich VC++ Express benutze?

Na ja, danke schonmal für die Hilfe.

mfg Manuel

riCo

Treue Seele

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

2

02.03.2006, 07:22

Hast du die Datei, in der die Klasse CLogfile deklariert wird, in dein Projekt mit eingebunden? Er findet jedenfalls die Funktionen nicht.
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

Anonymous

unregistriert

3

02.03.2006, 11:25

Stimmt, daran hat es gelegen. Aber was ich komisch finde, die Datei Singleton.hpp muss ich nicht einbinden, nur die anderen beiden.

Egal, jetzt gibt es allerdings noch folgende Probleme:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
------ Erstellen gestartet: Projekt: Listing 8_15, Konfiguration: Debug Win32 ------
Kompilieren...
Logfile.cpp
f:\eigene dateien\visual studio 2005\includes\logfile.cpp(31) : warning C4996: 'fopen' wurde als veraltet deklariert
        e:\programme\microsoft visual studio 8\vc\include\stdio.h(234): Siehe Deklaration von 'fopen'
        Meldung: "This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."
f:\eigene dateien\visual studio 2005\includes\logfile.cpp(49) : warning C4996: 'fopen' wurde als veraltet deklariert
        e:\programme\microsoft visual studio 8\vc\include\stdio.h(234): Siehe Deklaration von 'fopen'
        Meldung: "This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."
f:\eigene dateien\visual studio 2005\includes\logfile.cpp(138) : error C2664: 'vsprintf': Konvertierung des Parameters 1 von 'TCHAR [1024]' in 'char *' nicht möglich
        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
f:\eigene dateien\visual studio 2005\includes\logfile.cpp(142) : error C2664: 'void CLogfile::Textout(const char *)': Konvertierung des Parameters 1 von 'TCHAR [1024]' in 'const char *' nicht möglich
        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
f:\eigene dateien\visual studio 2005\includes\logfile.cpp(157) : error C2664: 'vsprintf': Konvertierung des Parameters 1 von 'TCHAR [1024]' in 'char *' nicht möglich
        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
f:\eigene dateien\visual studio 2005\includes\logfile.cpp(161) : error C2664: 'void CLogfile::Textout(int,const char *)': Konvertierung des Parameters 2 von 'TCHAR [1024]' in 'const char *' nicht möglich
        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
f:\eigene dateien\visual studio 2005\includes\logfile.cpp(176) : error C2664: 'vsprintf': Konvertierung des Parameters 1 von 'TCHAR [1024]' in 'char *' nicht möglich
        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
f:\eigene dateien\visual studio 2005\includes\logfile.cpp(180) : error C2664: 'void CLogfile::Textout(int,bool,const char *)': Konvertierung des Parameters 3 von 'TCHAR [1024]' in 'const char *' nicht möglich
        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
Das Buildprotokoll wurde unter "file://f:\Eigene Dateien\Visual Studio 2005\Projects\C++ für Spieleprogrammierer\Listing 8_15\Debug\BuildLog.htm" gespeichert.
Listing 8_15 - 6 Fehler, 2 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Mal schauen, ob ich es trotzdem irgendwie hinbekomme.

4

02.03.2006, 11:30

So, die Warnungen mit fopen hab ich nun wegbekommen, die fehler kommen wohl von diesem Codeausschnitt:

Quellcode

1
2
3
4
5
6
7
8
9
10
TCHAR buffer[MAX_BUFFER];  // char-Buffer
va_list pArgList;          // Liste der übergebenen Argumente

// String aus den Argumenten erstellen
va_start (pArgList, Text);
vsprintf (buffer, Text, pArgList);
va_end (pArgList);

// Erzeugten String schreiben
Textout (Color, buffer);

Da scheint etwas mit den Datentypen nicht zu stimmen. Werd mich wohl in der MSDN etwas schlau machen müssen.


Edit: Ich habe jetzt den Typen von buffer zu char* umgeschrieben, und es gibt jetzt keine Fehler mehr beim kompilieren (nur Warnungen, dass vsprintf veraltet sei). Jetzt kommt aber beim Ausführen der exe-Datei folgende Fehlermeldung:

Debug Assertion Failed!

Programm: ...
File vsprint.c
Line: 117

Expression: (string != NULL)

For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

So langsam weiß ich echt nicht mehr, was ich da noch tun kann. Der Code sieht jetzt so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
char *buffer = NULL;
va_list pArgList;          // Liste der übergebenen Argumente

// String aus den Argumenten erstellen
va_start (pArgList, Text);
vsprintf (buffer, Text, pArgList);
va_end (pArgList);

// Erzeugten String schreiben
Textout (buffer);



Edi2: Juhuu! Ich hab es jetzt mit Hilfe der MSDN tatsächlich hinbekommen, der Fehler lag, daran, dass buffer noch keinem Speicher zugewiesen wurde. Jetzt schaut der Code so aus und es funktioniert:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
char *buffer = NULL;
int len = 0;
va_list pArgList;          // Liste der übergebenen Argumente

// String aus den Argumenten erstellen
va_start (pArgList, Text);
len = _vscprintf( Text, pArgList ) + 1;
buffer = (char*)malloc( len * sizeof(char) );
vsprintf (buffer, Text, pArgList);
va_end (pArgList);

// Erzeugten String schreiben
Textout (Color, List, buffer);

riCo

Treue Seele

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

5

02.03.2006, 12:19

Vergiss nicht den Speicher wieder freizugeben.

C-/C++-Quelltext

1
free(Buffer);
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

6

02.03.2006, 23:50

Ok, danke!

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

26.12.2006, 19:20

Um nicht noch einen Thread auzumachen schreibe ich noch hier rein.
Ich habe das gleiche Problem, kann es aber mit dem Quelltext von Manuel nicht lösen!!
Ich bekommen den gleichen Fehler,"Debug Assertion Failure"..

Kann mir jemand helfen?

lg drakon

Co1m

Frischling

Beiträge: 19

Wohnort: Häusern

Beruf: Informatikkaufmann

  • Private Nachricht senden

8

09.09.2007, 19:32

Lösung

Hallo zusammen,
hier ist die Lösung bzw. die korrektut von Kapitel 8 / Logfile:
https://www.spieleprogrammierer.de/phpBB…p?p=87782#87782

Mit freundlichen grüßen

Daniel alias Co1m

Werbeanzeige