Проблема с tstring typedef - PullRequest
       25

Проблема с tstring typedef

3 голосов
/ 24 февраля 2011

У меня проблема с попыткой набрать себе удобную строку tstring (см. Ниже)

#ifndef _NISAMPLECLIENT_H_
#define _NISAMPLECLIENT_H_

#include <windows.h>
#include <stdlib.h>
using namespace std; // ERROR here (1)

#ifdef _UNICODE
#define CommandLineToArgv CommandLineToArgvW
#else
#define CommandLineToArgv CommandLineToArgvA
#endif

typedef basic_string<TCHAR> tstring; // ERROR HERE (2)

При компиляции я получаю ошибку компилятора.Ошибка в «ОШИБКА здесь (1)»:

Ошибка 3 Ошибка C2871: «std»: пространство имен с таким именем не существует \ nisampleclient \ nisampleclientdefs.h 16

Если я удаляю объявление using namespace std; и изменяю ОШИБКУ ЗДЕСЬ (2) на typedef std::basic_string<TCHAR> tstring;, я получаю сообщение об ошибке:

Ошибка 3: ошибка C2653: «std»: нетимя класса или пространства имен \ nisampleclient \ nisampleclientdefs.h 23

вместо этого.

Заранее спасибо.:)

Ответы [ 2 ]

7 голосов
/ 24 февраля 2011

Включить заголовок string (#include <string>, а не string.h;)).

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

using namespace ...

... в заголовках, если вы не хотите вызвать гнев ваших коллег-разработчиков;)

Примечание: в C ++ большинство традиционных стандартных заголовков C имеют дубликаты без расширения .h, но с лидирующим c. В вашем случае #include <cstdlib> будет лучшим выбором, хотя это зависит от используемых вами компиляторов, если есть реальная разница.

5 голосов
/ 24 февраля 2011

std::basic_string шаблон класса принимает три аргумента. Итак, вы должны сделать это:

 #include <string> //include this

 typedef std::basic_string<TCHAR, std::char_traits<TCHAR>, std::allocator<TCHAR> > tstring;
...