2009-06-22 12 views
1

Ich habe gerade den Code für ein Projekt neu organisiert und jetzt bekomme ich Fehler, die ich nicht lösen kann. Dieser Header ist in einer CPP-Datei enthalten, die versucht, zu kompilieren.Problem beim Kompilieren einer Header-Datei in VC++

#include "WinMain.h" 
#include "numDefs.h" 
#include <bitset> 

class Entity 
{ 
public: 
    Entity(); 
    virtual ~Entity(); 

    virtual bitset<MAX_SPRITE_PIXELS> getBitMask(); 
    virtual void getMapSection(float x, float y, int w, int h, bitset<MAX_SPRITE_PIXELS>* section); 
}; 

Ich erhalte diese Compiler-Fehler für die Deklaration von Entity :: getBitMask():

Fehler C2143: Syntaxfehler: fehlen; vor '<' C2433

Fehler: 'Entity :: bitset': 'virtuelle' nicht Erklärungen

Fehler C4430 auf Daten erlaubt: fehlende Typspezifizierer - int angenommen. Hinweis: C++ unterstützt nicht default-int

Fehler C2238: unerwartete Token vor ";"

Es gibt mehr ähnliche Fehler für die nächste Zeile. Es scheint, dass Bitset nicht enthalten ist, aber es ist klar? Ich kann nicht herausfinden, was falsch läuft. WinMain.h enthält windows.h und numDefs.h enthält nichts.

mit MS Visual C++ 2008

+0

Was ist MAX_SPRITE_PIXELS und wo ist es definiert? –

+0

MAX_SPRITE_PIXELS ist in numDefs.h definiert –

Antwort

8

die bitset als std::bitset<MAX_SPRITE_PIXELS> erklären.

0

Sieht aus wie ein Fehler in "numDefs.h"

5

Die bitset Vorlage wird im std:: Namensraum definiert, so müssen Sie entweder es verweisen, indem er voll ist Name std::bitset oder fügen Sie using namespace std; irgendwo vor der Klassendeklaration.

+2

"Hinzufügen mit Namespace Std; irgendwo", aber nicht in einer Header-Datei – TimW

+0

Wo ist der beste Ort, um dies zu tun? Ich verwende nur einen Namespace, also sollte ich einfach "using namespace std;" bevor das # in allen meinen cpp-Dateien enthalten ist? –

+1

Wie hast du es bis jetzt gemacht? Ich würde empfehlen, nur das Präfix std :: zu schreiben, wenn Sie Dinge aus der Standardbibliothek verwenden. Andernfalls enden Sie mit einer Menge Dinge mit sehr allgemeinen Namen (wie "Kopie") in Ihrem globalen Namespace, von denen Sie nicht einmal wissen. Dies kann zu überraschenden Effekten führen. Ansonsten ist es wahrscheinlich am besten, die voll qualifizierten Namen in den Headern zu verwenden und den "using namespace std;" an der Spitze Ihrer .cpps, nach dem # includes. – sth

4

Ich denke, Sie müssen sagen, std :: bitset.

Verwandte Themen