Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 16.06.2004, 18:42 Titel: Problem mit DirectInput |
|
|
Hallo,
beim Beispiel DIRECTINPUTKEYBOARD bekomme ich immer 7 Fehler, obwohl mein Textvergleich-Programm keine unterschiede findet.
Die Fehler lauten:
Zitat: | C:\Programme\Microsoft Visual Studio\MyProjects\DirectX und Visual C++\DIRECTINPUTKEYBOARD\DIRECTINPUTKEYBOARD.CPP(126) : error C2143: Syntaxfehler : Fehlendes ')' vor 'constant'
C:\Programme\Microsoft Visual Studio\MyProjects\DirectX und Visual C++\DIRECTINPUTKEYBOARD\DIRECTINPUTKEYBOARD.CPP(126) : error C2660: 'CreateWindowExA' : Funktion akzeptiert keine 8 Parameter
C:\Programme\Microsoft Visual Studio\MyProjects\DirectX und Visual C++\DIRECTINPUTKEYBOARD\DIRECTINPUTKEYBOARD.CPP(163) : error C2601: 'InitDirectInput' : Lokale Funktionsdefinitionen sind unzulaessig
C:\Programme\Microsoft Visual Studio\MyProjects\DirectX und Visual C++\DIRECTINPUTKEYBOARD\DIRECTINPUTKEYBOARD.CPP(203) : error C2601: 'ProcessInput' : Lokale Funktionsdefinitionen sind unzulaessig
C:\Programme\Microsoft Visual Studio\MyProjects\DirectX und Visual C++\DIRECTINPUTKEYBOARD\DIRECTINPUTKEYBOARD.CPP(291) : error C2601: 'CleanUpDirectInput' : Lokale Funktionsdefinitionen sind unzulaessig
C:\Programme\Microsoft Visual Studio\MyProjects\DirectX und Visual C++\DIRECTINPUTKEYBOARD\DIRECTINPUTKEYBOARD.CPP(307) : fatal error C1004: Unerwartetes Dateiende gefunden
Fehler beim Ausführen von cl.exe. |
Was ist das Problem??
Vielen Dank! |
|
Nach oben |
|
 |
fowly JLI'ler

Anmeldedatum: 25.01.2004 Beiträge: 196 Wohnort: Detmold - NRW Medaillen: Keine
|
Verfasst am: 16.06.2004, 19:07 Titel: |
|
|
also ich denke mal, dass du vergessen hast irgendwo die klammer zuzusammen. am besten du überprüfst das nochmal. _________________ <-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->
Das Spiel zu unserer Schule:
http://www.grabbe-game.de |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 16.06.2004, 20:54 Titel: |
|
|
Danke erstmal für die Antwort.
Hab die Klammern nochmal überprüft, jetzt gibt es auch nur noch 3 Fehler.
Diese lauten folgendermaßen:
Zitat: | C:\Programme\Microsoft Visual Studio\MyProjects\DirectX und Visual C++\DIRECTINPUTKEYBOARD\DIRECTINPUTKEYBOARD.CPP(162) : error C2601: 'InitDirectInput' : Lokale Funktionsdefinitionen sind unzulaessig
C:\Programme\Microsoft Visual Studio\MyProjects\DirectX und Visual C++\DIRECTINPUTKEYBOARD\DIRECTINPUTKEYBOARD.CPP(202) : error C2601: 'ProcessInput' : Lokale Funktionsdefinitionen sind unzulaessig
C:\Programme\Microsoft Visual Studio\MyProjects\DirectX und Visual C++\DIRECTINPUTKEYBOARD\DIRECTINPUTKEYBOARD.CPP(290) : error C2601: 'CleanUpDirectInput' : Lokale Funktionsdefinitionen sind unzulaessig |
Die Funktionsdefinitionen sind unzulässig, was muss ich da machen um die Fehler wegzubekommen??
Vielen Dank. |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 16.06.2004, 21:26 Titel: |
|
|
Ich würde sagen da fehlt noch eine Klammer. _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
 |
Sören JLI Master Trainee

Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 16.06.2004, 21:53 Titel: |
|
|
Jo, eine geschweifte fehlt, also eine } am Ende einer Funktion, würde ich erfahrungsgemäß tippen. Hin und wieder hat man mal den Fehler. |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 17.06.2004, 17:42 Titel: |
|
|
mhh...also ich habe nochmal alles kontrolliert, habe aber keine fehlenden Klammern ausmachen können, auch nicht mit einem Textvergleichprogramm.
Kann das noch an etwas anderem liegen?
Und an der Stelle mit den Mängeln sind auch irgendwie keine Klammern zu wenig oder zu viel.
Vielen Dank |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 17.06.2004, 18:41 Titel: |
|
|
Tja also Fehlermeldungen alleine sind wenig aussagekräftig. Wie wärs mal mit nem bischen Quelcode? Zeigt er irgendne bestimmte Zeile an, wenn du einen Doppelklick auf den Fehler machst? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 17.06.2004, 20:54 Titel: |
|
|
Ja also er zeigt die Stellen mit den Fehlern an. |--> Weist auf die Zeile auf den Fehler hin.
Hier sind die Codeausschnitte:
Der Erste:
Zitat: | BOOL InitDirectInput(HINSTANCE hInst)
|--> {
// DirectInput8-Objekt anlegen
if(FAILED(DirectInput8Create(hInst, DIRECTINPUT_VERSION,
IID_IDirectInput8,(void**)&lpDI,NULL)))
{
MessageBox(hWnd, "Fehler beim Anlegen des DirectInput8-Objekts","Fehler",MB_OK);
return FALSE;
}
// Gerät für die Tastatur festlegen
if(FAILED(lpDI->CreateDevice(GUID_SysKeyboard, &lpDIKeyboard, NULL)))
{
MessageBox(hWnd, "Fehler beim Anlegen des Tastatur-Geräts","Fehler",MB_OK);
return FALSE;
}
// c_dfDIKeyboard ist eine vordefinierte Variable
if(FAILED(lpDIKeyboard->SetDataFormat(&c_dfDIKeyboard)))
{
MessageBox(hWnd,"Fehler beim Setzen des Datenformats","Fehler",MB_OK);
return FALSE;
}
// Kooperationsebene festlegen
if(FAILED(lpDIKeyboard->SetCooperativeLevel(hWnd,DISCL_FOREGROUND |
DISCL_NONEXCLUSIVE)))
{
MessageBox(hWnd,"Fehler beim Setzen der Kooperationsebene (DirectInput)","Fehler",MB_OK);
return FALSE;
}
// Zugang zur Tastatur verschaffen
lpDIKeyboard->Acquire();
return TRUE;
} |
Der Zweite:
Zitat: | void ProcessInput(void)
|--> {
// alle Tasten der Tastatur
bool bKeyboard[256];
int y = 20; int x = 20;
if(FAILED(lpDIKeyboard->GetDeviceState(sizeof(bKeyboard),(LPVOID)&bKeyboard)))
{
// die Tastatur wurde zwischenzeitlich
// durch eine andere Anwendung genutzt
// Kontrolle wiederholen
lpDIKeyboard->Acquire();
return;
} |
Der Dritte Fehler:
Zitat: | void CleanUpDirectInput(void)
|--> {
if(NULL != lpDIKeyboard)
{
lpDIKeyboard->Unacquire();
lpDIKeyboard->Release();
lpDIKeyboard = NULL;
}
if(NULL != lpDI)
{
lpDI->Release();
lpDI = NULL;
}
}
} |
Die ganzen Tabulatoren usw. macht die Zitat-Funktion weg, ich hoffe es geht auch so.
Vielen Dank! |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 17.06.2004, 21:03 Titel: |
|
|
Das müsste dann heißen, dass die Funktion vor "BOOL InitDirectInput(HINSTANCE hInst)" nicht mit } abgeschlossen wurde.
Es kann auch sein, dass du innerhalb der Funktion mal (z.B. bei if/switch-Anweisungen) eine geschweifte Klammer vergessen hast  _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 18.06.2004, 13:30 Titel: |
|
|
So wie ich das jetzt sehe, ist im zweiten Abschnitt eine } zu wenig und im dritten eine } zu viel. Und statt der Zitatfunktion könntest du auch CodeBlöcke nehmen, dann bleibt die Einrückung. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 18.06.2004, 13:35 Titel: |
|
|
An dieser Stelle sieht es so aus als würde ein Klammer fehlen:
Zitat: | LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// testen, um welche Nachticht es sich handelt
switch(msg)
{
// wenn das Fenster geschlossen wird, eine Nachricht senden,
// die das Programm beendet
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_KEYDOWN:
switch(wParam)
{
// Wenn ESC gedrückt, Programm beenden
case VK_ESCAPE:
DestroyWindow(hWnd);
break;
}
// Wenn wir uns nicht um die Nachricht gekümmert haben
// wird sie an die Standardnachrichtenverarbeitung von Windows
// geschickt
return DefWindowProc(hwnd, msg, wParam, lParam);
} |
Die Stelle unterscheidet sich tatsächlich von der von der Buch-CD.
Allerdings zeigt das das Vergleichsprogramm nicht an, was mich wundert, und die Fehlermeldungen werden auch nicht weniger  |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 18.06.2004, 14:08 Titel: |
|
|
Ja, es fehlt eine geschweifte Klammer hinter der zweiten switch-Anweisung.
Übrigens werden alle switch-Anweisungen(bzw. der gesamte Block) mit einem Semikolon abgeschlossen.
Code: | switch(variable)
{
case 1:
{
Foo.bar();
break;
}
}; |
Ohne das abschließende Semikolon müsste es so auch zu Kompilerfehlern kommen. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 18.06.2004, 15:13 Titel: |
|
|
@Lord, Danke!
Seltsam, ich hatte vorhin nochmal einen 2. Arbeitsbereich gemacht, wo ich meinen Fehlerhaften Code reingesetzt habe, der ging auch nicht, bei beiden waren die gleichen Fehler.
Jetzt habe ich die fehlende Klammer beim einen eingesetzt, und dann ging er beim anderen war eine Klammer zum Schluss die beim andere zuviel gewesen war richtig. Naja was solls, jetzt funktioniert jedenfalls alles.
Also nochmal vielen Dank! |
|
Nach oben |
|
 |
|