2010-05-22 3 views
1

Je suis nouveau à C++, en essayant de déboguer la ligne de code suivanteerreur de syntaxe: missing ';' avant identifiant

class cGameError 
{ 
    string m_errorText; 
    public: 
     cGameError(char *errorText) 
     { 
      DP1("***\n*** [ERROR] cGameError thrown! text: [%s]\n***\n", 
      errorText); 
      m_errorText = string(errorText); 
     } 

     const char *GetText() 
     { 
      return m_errorText.c_str(); 
     } 
}; 

enum eResult 
{ 
    resAllGood = 0, // function passed with flying colors 
    resFalse = 1, // function worked and returns 'false' 
    resFailed = –1, // function failed miserably 
    resNotImpl = –2, // function has not been implemented 
    resForceDWord = 0x7FFFFFFF 
}; 

Ce fichier d'en-tête est inclus dans le programme comme suit

#include "string.h" 
#include "stdafx.h" 
#include "Chapter 01 MyVersion.h" 
#include "cGameError.h" 

Répondre

4

Vous devez inclure < chaîne >, pas "string.h". Ou en plus de "string.h".

string.h est l'en-tête de C pour les fonctions de manipulation de chaîne C standard (strcpy() et amis.)

< chaîne > est en-tête de la norme C où 'chaîne' est définie.

Vous devez également spécifier l'espace de noms std lorsque vous utilisez la chaîne:

std::string m_errorText; 

Ou en utilisant:

using namespace std; 

Quelque part au sommet de votre dossier.

Vous devez également utiliser des chevrons pour les fichiers d'inclusion système.

+0

Oui, également besoin de l'espace de noms std; – numerical25

1

Vous avez fourni peu d'informations assez que ce n'est une supposition sauvage, mais à première vue, je pense que le problème est que vous n'avez pas inclus <string>, seulement "string.h" (l'ancien définit la classe std::string C++, celui-ci les fonctions C pour manipuler NUL terminaison des chaînes.

en aparté, vous voulez normalement utiliser équerres pour les en-têtes du système, il devrait donc être <string.h>.

+0

En fait, "string.h" ne fait pas partie de * any * standard - lorsque vous placez le nom d'en-tête entre guillemets, le fichier est recherché uniquement dans le * répertoire courant *. –

+1

@Stefan: Pas si. Il est d'abord recherché d'une manière définie par l'implémentation (typiquement le répertoire courant), et si cela échoue, retraité comme s'il avait utilisé des chevrons (C99, §6.10.2/3, C++ 03 §16.2/3). –

+0

Ah, d'accord. Je vois. –

1

Essayez #include <string>, au lieu de #include "string.h", chaîne .h/cstring est l'ancien en-tête de la chaîne C, la chaîne est le nouveau C++ std::string en-tête de classe. Et vous utilisez normalement des crochets pour les en-têtes du système.