2010-05-22 4 views
1

Я новичок в C++, пытаясь отладить следующую строку кодаСинтаксическая ошибка: отсутствует ';' перед тем идентификатором

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 
}; 

Этот заголовочный файл включен в программу, как следует

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

ответ

4

Вам необходимо включить < строку >, не "string.h". Или в дополнение к «string.h».

string.h является заголовком C для стандартных функций обработки C строки (зЬгср() и друзей.)

< строка > является стандартом C++ заголовка, где определяется «строка».

Кроме того, необходимо указать патезрас при использовании строки:

std::string m_errorText; 

Или с помощью:

using namespace std; 

Где-то в верхней части файла.

Вы также должны использовать угловые скобки для системных файлов.

+0

Да, также необходимо пространство имен std; – numerical25

1

Вы предоставили достаточно мало информации, что это всего лишь дикая догадка, но на первый взгляд, я думаю, проблема в том, что вы не включили <string>, только "string.h" (бывший определяет класс C++ std::string, последние функционирую C для манипулирования последовательности нулевых байт.

Как и в стороне, вы обычно хотите использовать угловые скобки для системных заголовков, поэтому она должна быть <string.h>.

+0

Фактически, «string.h» не является частью * any * standard - при вложении имени заголовка в кавычки поиск файла выполняется только в * текущей директории *. –

+1

@Stefan: Не так. Его сначала обыскивают в определенном порядке реализации (обычно в текущем каталоге), и если это не удается, он обрабатывается так, как если бы он использовал угловые скобки (C99, §6.10.2/3, C++ 03 §16.2/3). –

+0

Ах, хорошо. Понимаю. –

1

Попробуйте #include <string> вместо #include "string.h", струнного .h/cstring - это старый заголовок C-строки, строка - это новый C++ std::string. Обычно вы используете угловые скобки для системных заголовков.

Смежные вопросы