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

12.11.2011, 15:26

'RAWINPUT' has not been declared

Ich bin am verzweifeln.... habe mittlerweile schon alle denkbaren Header eingebunden und alle include-Dateien meines Projekts überprüft, aber es funktioniert nicht:

MapEditor.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef __MAPEDITOR_DOT_H__
#define __MAPEDITOR_DOT_H__

class CMapEditor;

#include "headers.h"
#include "MainMenu.h"

#include <Windows.h>
#include <WinUser.h>

class CMapEditor
{
  public:
    //...
    static void injectMouse(RAWINPUT *);
//...

Diese Klasse wird an mehreren Stellen meines Projekts eingebunden.

Problem ist folgendes:

Zitat

\MapEditor.h|20|error: 'RAWINPUT' has not been declared|
Es kann doch eigentlich nicht daran liegen, dass die Quelldatei von einer anderen Stelle aus eingebunden wird, wo dann im Einzelfall RAWINPUT nicht bekannt ist, weil ich ja vorher doppelt gemoppelt Windows.h und WinUser.h eingebunden habe. Laut MSDN ist RAWINPUT in WinUser.h definiert und dann müsste es ja eigentlich reichen, Windows.h zu inkludieren.

Aber warum findet er RAWINPUT trotzdem nicht??

Hoffe, mir kann jemand helfen...

lg Paul

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

12.11.2011, 15:57

Ich vermute mal, dass du hier einen zyklischen include hast. Das gibt dann solche eher irreführenden Fehlermeldungen. Lies mal das hier:
http://www.drakon.ch/?id=&offset=5&mobile=0&show_entry=77

und schau ob du so etwas gemach hast (ich tippe mal darauf, dass MainMenu.h MapEditor.h inkludiert, was dann genau ein Fehler ist).

btw:
Was soll die Vorwärtsdeklaration von CMapEditor? Das ist für mich ein weiteres Indiz, dass obiger Fehler vorliegt.

3

12.11.2011, 17:19

Habe gerade über das Build log herausgefunden, dass der Fehler beim compilieren von HelpMenu.cpp auftritt, es ist also tatsächlich so etwas ähnliches, wie du beschrieben hast, drakon.


Hier das Build Log:

Zitat


-------------- Build: Debug in Escape! ---------------

Compiling: Escape_Main.cpp
Compiling: HelpMenu.cpp
In file included from C:\Users\Paul\Documents\CodeBlocks\Projects\Escape!\/MainMenu.h:10:0,
from C:\Users\Paul\Documents\CodeBlocks\Projects\Escape!\/HelpMenu.h:8,
from C:\Users\Paul\Documents\CodeBlocks\Projects\Escape!\HelpMenu.cpp:1:
C:\Users\Paul\Documents\CodeBlocks\Projects\Escape!\/MapEditor.h:20:29: error: 'RAWINPUT' has not been declared
Process terminated with status 1 (0 minutes, 12 seconds)
1 errors, 0 warnings


Dann werde ich jetzt also mal Präprozessor spielen, und verfolgen, was bei HelpMenu alles eingebunden wird....




EDIT:
So hier das Ergebnis meiner Analyse von HelpMenu.cpp. Ich habe alle #include-Anweisungen genommen (außer die der verwendeten APIs) und durch den Code der Entsprechenden Headerdatei ersetzt.

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#ifndef __HELP_MENU_DOT_H__
#define __HELP_MENU_DOT_H__

class CHelpMenu;

#ifndef __HEADERS_H__
#define __HEADERS_H__

// Ogre-Headers:
#include <OgreRoot.h>
#include <OgreConfigFile.h>
#include <OgreWindowEventUtilities.h>
#include <OgreRenderWindow.h>
#include <OgreCommon.h>
#include <OgreMeshManager.h>
#include <OgreEntity.h>


// OIS-headers
#include <OISEvents.h>
#include <OISInputManager.h>
#include <OISKeyboard.h>


// CEGUI-Headers:
#include <CEGUI.h>
#include <RendererModules/Ogre/CEGUIOgreRenderer.h>

#ifndef __GENERAL_SETTINGS_DOT_H__
#define __GENERAL_SETTINGS_DOT_H__


struct Ssettings
{
    // Einstellungen....
};

#endif // __GENERAL_SETTINGS_DOT_H__




#define UV2(x,y) CEGUI::UVector2(CEGUI::UDim(x,0),CEGUI::UDim(y,0))
using namespace std;

#endif // __HEADERS_H__

#include <windows.h>
// Bereits hier wird windows.h zum ersten mal eingebunden, daher müsste also nun auch RAWINPUT definiert sein.


#ifndef __MAIN_MENU_H__
#define __MAIN_MENU_H__

class CMainMenu;

#include "headers.h"
// Guard-Block __HEADERS_H__ sorgt dafür, dass sie nicht nochmal eingebunden wird

#include "HelpMenu.h"
// Hier ebenso...

#ifndef __OPTIONS_MENU_DOT_H__
#define __OPTIONS_MENU_DOT_H__

class COptionsMenu;

#include "headers.h"
// siehe oben

#include "MainMenu.h"
// siehe oben

class COptionsMenu
{
  // Definition der Klasse....
};

#endif // __OPTIONS_MENU_DOT_H__



#include <windows.h>
// Windows.h wird wieder eingebunden!!


#ifndef __MAPEDITOR_DOT_H__
#define __MAPEDITOR_DOT_H__

class CMapEditor;

#include "headers.h"
// siehe oben

#include "MainMenu.h"
// siehe oben...

#include <Windows.h>
// und sogar nochmal!
#include <WinUser.h>

class CMapEditor
{
  public:
    //....
    static void injectMouse(RAWINPUT *);
    // Und hier ist das RAWINPUT, was laut Compiler nicht deklariert wurde. Hä?


    //.... weitere Definition
};

#endif // __MAPEDITOR_DOT_H__


class CMainMenu
{
  // Definition....
};

#endif // __MAIN_MENU_H__



class CHelpMenu
{
  //....
};

#endif // __HELP_MENU_DOT_H__


// Zum Schluss folgen die Implementierungen aus HelpMenu.cpp

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MasterHelmut« (12.11.2011, 17:39)


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

12.11.2011, 19:35

Bereinige mal das Projekt und probiers nochmal (habe jetzt nicht alles durchgeschaut).
Dann als nächtes solltest du mal probieren in einem sonst leeren Projekt RAWINPUT zu benutzen. Dann weist du, obs an Einstellungen etc. oder sonst was liegt.
Dann Schritt für Schritt das Projekt hier reduzieren (falls es in dem leeren Projekt funktioniert hat) bis es geht und dann hast du den Fehler schon fast.

5

12.11.2011, 19:59

Wie gut, dass ich das selbe Problem noch im Forum auf Chip.de gepostet habe. Dort hat man mir einen ganz anderen Tipp gegeben, der das Problem auch behoben hat.
http://forum.chip.de/c-c/rawinput-has-no…ed-1576802.html

Werbeanzeige