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

1

03.12.2011, 17:02

Problem bei Listing 2.58 (InitDirect3D verursacht Fehler in Zeile 20)

Guten Abend,

nach mehreren Stunden rumprobieren und Googel, frag ich doch mal lieber hier nach. Und zwar geht es um das Listing 2.58 welches auf der Seite 129-130 zu finden ist.
Sobald ich den Code kompiliere werden mir ein paar Fehler um die Ohren gehaun. Ich weiß zwar was die Fehler bedeuten, allerdings nicht wieso sie auftreten.

Hier mal die Fehler.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1>c:\users\*\documents\visual studio 2010\projects\devicecount\devicecount\initdirect3d.h(20): error C2065: 'SDirect3DParameters': nichtdeklarierter Bezeichner
1>c:\users\*\documents\visual studio 2010\projects\devicecount\devicecount\initdirect3d.h(20): error C2065: 'pParameters': nichtdeklarierter Bezeichner
1>c:\users\*\documents\visual studio 2010\projects\devicecount\devicecount\initdirect3d.h(20): error C2275: 'HWND': Ungültige Verwendung dieses Typs als Ausdruck
1>          c:\program files\microsoft sdks\windows\v7.0a\include\windef.h(208): Siehe Deklaration von 'HWND'
1>c:\users\*\documents\visual studio 2010\projects\devicecount\devicecount\initdirect3d.h(20): error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'hWindow'
1>c:\users\*\documents\visual studio 2010\projects\devicecount\devicecount\initdirect3d.h(20): error C2078: Zu viele Initialisierungen
1>c:\users\*\documents\visual studio 2010\projects\devicecount\devicecount\initdirect3d.h(20): error C2275: 'HWND': Ungültige Verwendung dieses Typs als Ausdruck
1>          c:\program files\microsoft sdks\windows\v7.0a\include\windef.h(208): Siehe Deklaration von 'HWND'
1>c:\users\*\documents\visual studio 2010\projects\devicecount\devicecount\initdirect3d.h(20): error C2059: Syntaxfehler: ')'
1>c:\users\*\documents\visual studio 2010\projects\devicecount\devicecount\main.cpp(47): error C2064: Ausdruck ergibt keine Funktion, die 2 Argumente übernimmt
1>  InitWindow.cpp
1>  InitDirect3D.cpp
1>  Direct3DEnum.cpp
1>  Code wird generiert...
1>
1>Fehler beim Erstellen
1>
1>Verstrichene Zeit 00:00:03.94
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========


Wenn ich das Beispielprogramm von der CD kompiliere klappt auch alles, dass heißt ich habe irgendwo einen Fehler drin, doch wo ist die gute Frage. :)
Zu meinen Projektordner habe ich folgende Datein Hinzugefügt:

  • Allgemeines.h
  • Allgemeines.rc
  • Direct3DEnum.cpp
  • Direct3DEnum.h
  • Icon1.ico
  • InitDirect3D.h
  • InitDirect3D.cpp
  • InitWindow.h
  • InitWindow.cpp
  • resource.h
Der Code von dem eigentlichen Programm sieht wie folgt aus:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <TriBase.h>
#include <Windows.h>

#include "InitWindow.h"
#include "InitDirect3D.h"
#include "Direct3DEnum.h"
#include "resource.h"


tbResult Render(float fNumSecsPassed)
{
    return TB_OK;
}
tbResult Move(float fNumSecsPassed)
{
    return TB_OK;
}



int WINAPI WinMain( HINSTANCE hInstance, 
                    HINSTANCE hPrevInstance, 
                    char* pcCommandLine, 
                    int iShowCommand) 
{ 
    SDirect3DParameters Direct3DParameters;
    tbResult Result;
        tbInit();
    Result = GetDirect3DParameters(&Direct3DParameters);
    if(Result == TB_ERROR)
    {
        MessageBox(0,"Fehler beim Abfragen der Parameter","ERROR",MB_OK|MB_ICONERROR);
        tbExit();
        return 1;
    }
    else if(Result == TB_CANCELED)
    {
        tbExit();
        return 0;
    }
    if(InitWindow(Direct3DParameters.VideoMode.Width,Direct3DParameters.VideoMode.Height,"Direct3D",LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1))))
    {
        MessageBox(0,"Fehler beim Erstellen","Error!",MB_OK|MB_ICONERROR);
        tbExit();
        return 1;
    }
    if(InitDirect3D(&Direct3DParameters,g_hWindow))
    {
        MessageBox(0,"Fehler bei InitDirect3D","Error!",MB_OK|MB_ICONERROR);
        ExitWindow();
        tbExit();
        return 1;
    }

    tbDoMessageLoop(Render,Move);


    ExitDirect3D();
    ExitWindow();
    tbExit();
    return 0; 
}




Hat einer von euch eine Idee woran es liegen könnte?




Achja wenn ich gerade schonmal einen Thread aufmache, dann habe ich noch eine kleine Frage.
Seit 1-2 Tagen "spinnt" mein VC++ 2010 ein wenig, normal hat es, wenn ich F5 gedrückt habe, immer gesagt: "Die Datei exsistiert bereits, soll die Datei xyz.exe neu erstellt werden?"
(Natürlich nur wenn ich es vorher schoneinmal kompiliert habe)
Dort konnte ich dann Ja oder Nein drücken. Diese Abfrage kommt jetzt nicht mehr sondern er nimmt immer die alte Datei. Zur Zeit kann ich es nur so umgehen, dass ich es über "Erstellen->neu erstellen" kompiliere, aber das ist ja auch keine Lösung. Weiß einer wie ich die alte Einstellung wieder zurück bekomme?

PS: Achja sollte es die Datei nocht nie vorher kompiliert worden sein, dann sagt er mir beim drücken von F5 folgendes:
"c/(Hier der Pfad) kann nicht gestartet werden. Das System konnte die angegebene Datei nicht finden".

Das ist ja auch logisch dass er sie nicht finden kann, sie wurde ja auch noch nie erstellt. Aber das Erstellen der Datei hat er früher Automatisch gemacht und nicht versucht eine alte EXE zu starten.


Ich hoffe dass ihr mir Helfen könnt.

MfG Noxum.
Why so serious ?

Fluaflubfluc

unregistriert

2

03.12.2011, 22:21

Der Fehler beim kompilien liegt daran, dass du Visual C++ 2010 benutzt. Ich hatte dieses Problem auch. Bei den frueheren Versionen hat es noch geklappt. Da ich aber meine Lieblingsversion nicht verlassen will, habe ich auch nach der Loesung gesucht. Rausgekommen ist, ich habe keine gefunden. Mach dir aber keine Sorgen darueber. In Kapitel 3 wird alle 3D Sachen mit TriBase gemacht. Dann brauchst du diese Dateien nicht mehr und dann ist dein Problem geloest. Also erstmal Kapitel 2 grob und trocken durchlesen. Dann bei Kapitel 3 kannst du dann richtig loslegen. Schau dir mal das Beispielprogramm Kapitel 3 mit der Stadt und dem Raumschiff an. Dieses kannst du super kompilieren. :thumbsup:
Bei dem F5 Fehler kann ich dir wirklich nicht helfen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Fluaflubfluc« (25.12.2014, 22:08)


3

03.12.2011, 22:39

Hm, aber das Beispielprogramm von der CD läst sich ja auch kompilieren, nur wenn ich es selbst nachschreibe klappt es nicht.
Also an der Version kann es somit eigentlich nicht liegen.


Edit: Ok kann sein, dass die Beispielprogramme doch nicht kompilierbar sind. Da mein VC++ 2010 ja ein wenig spinnt, führt es ja einfach nur die EXE'n aus.
Naja schade schade.

Edit2: Achja und was du meintest mit: "Also erstmal Kapitel 2 grob und trocken durchlesen"
Ich glaub damit lernt man sehr sehr schlecht. Das meiste lernt man so oder so durch Ausprobieren (learning by doing) und da das zweite Kapitel doch recht viele Informationen hat fände ich es sehr schade wenn ich die Beispiele nicht kompilieren könnte.
Naja ich werd es einfach gleich nochmal von Vorne versuchen, vielleicht geht es ja dann.



Edit3: Für alle die das gleiche Problem mit dem Erstellen haben, ich hab es jetzt so gelöst, dass ich einfach alle Einstellungen zurückgesetzt habe. Ist zwar nicht die feine Art, aber es läuft wieder.
Allerdings habe ich immernoch die Fehler mit der InitDirect3D() :/


So letzter Edit! : Keine Ahnung wieso, aber nachdem ich den Quellcode nochmal abgeschrieben habe läuft alles. Hatte vorher eigentlich jede Zeile überprüft. Naja und jetzt weiß ich nicht ob ich glücklich darüber sein soll oder heulen, da ich jetzt bestimmt 6 Stunden versucht habe das Zeug zum laufen zu bekommen. Naja ich wünsche allen noch eine gute Nacht :)
Why so serious ?

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Noxum« (04.12.2011, 01:18)


MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

4

04.12.2011, 01:15

Leider fehlen die entsprechenden Codezeilen, aber die Fehlermeldungen sind doch sehr aussagekräftig.
Anscheinen hast Du nicht alle Includes richtig, und noch Syntaxfehler im Code.
Die Zeile sagt da ja sehr viel: "Syntaxfehler: Fehlendes ')' vor Bezeichner 'hWindow'"
Die Zeilennummer steht doch auch, also, dort einfach mal schauen. ;)

5

04.12.2011, 01:23

Hey MCP,

ja allerdings befinden sich alle Syntaxfehler in der InitDirect3D.h welche ich ja nicht verändert habe und welche mit dem Buch mitgeliefert wurde.
Nach erneuten Abschreiben läuft jetzt auch alles was mich aber stark wundert, da ich eigentlich jede Zeile nochmal einzeln durchgegagen bin.

Naja Hauptsache es geht jetzt und ich kann weiter arbeiten.


Dir noch eine gute Nacht und danke für deine/eure Antwort/en.

MfG Noxum
Why so serious ?

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

6

04.12.2011, 01:27

Solche Syntaxfehler können auch in einer anderen Datei liegen und erst dort auftauchen. Zum Beispiel wenn man am Ende einer Klasse ein Semikolon vergessen hat und diese dann vor der initdirect3d Header-Datei einbindet.

Anhand der Fehlermeldung kann man solche Fehler aber recht schnell eingrenzen, mit etwas Übung geht das immer schneller. ;)

Ich wünsche Dir auch noch eine gute Nacht! :D

Werbeanzeige