2009-06-22 6 views
1

Je viens de réorganiser le code d'un projet et maintenant je reçois des erreurs que je n'arrive pas à résoudre. Cet en-tête est inclus par un fichier .cpp essayant de compiler.Problème lors de la compilation d'un fichier d'en-tête dans 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); 
}; 

Je reçois ces erreurs de compilation pour la déclaration de l'entité :: getBitMask():

erreur C2143: erreur de syntaxe: manquant ';' avant '<'

erreur C2433: 'Entité :: bitset': 'virtuel' non autorisé sur les déclarations de données

erreur C4430: manque spécificateur de type - int supposé. Remarque: C++ ne prend pas en charge default-int

erreur C2238: jeton (s) inattendu (s) précédant ';'

Il existe également d'autres erreurs similaires pour la ligne suivante. Il semble que bitset ne soit pas inclus mais c'est clairement? Je ne peux pas comprendre ce qui ne va pas. WinMain.h inclut windows.h et numDefs.h ne comprend rien.

En utilisant MS Visual C++ 2008.

+0

Qu'est-ce que MAX_SPRITE_PIXELS et où est-il défini? –

+0

MAX_SPRITE_PIXELS est défini dans numDefs.h –

Répondre

8

déclarer la bitset comme std::bitset<MAX_SPRITE_PIXELS>.

0

On dirait une erreur dans "numDefs.h"

5

Le modèle bitset est défini dans l'espace de noms std::, de sorte que vous devez soit faire référence par son nom complet std::bitset ou ajouter using namespace std; quelque part avant la déclaration de classe.

+2

"ajouter using namespace std; part" mais pas dans un fichier d'en-tête – TimW

+0

Où est le meilleur endroit pour cela? J'utilise seulement un espace de noms, alors devrais-je simplement mettre "using namespace std;" avant le #includes dans tous mes fichiers cpp? –

+1

Comment l'avez-vous fait jusqu'à maintenant? Je recommande d'écrire simplement le préfixe std :: lorsque vous utilisez des éléments de la bibliothèque standard. Sinon, vous finissez avec beaucoup de choses avec des noms très communs (comme "copier") dans votre espace de noms global que vous ne connaissez même pas. Cela peut conduire à des effets surprenants. Sinon, il est probablement préférable d'utiliser les noms complets dans les en-têtes et de faire le "using namespace std;" en haut de votre fichier .cpps, après le #includes. – sth

4

Je pense que vous devez dire std :: bitset.

Questions connexes