tstring typedef的问题

时间:2011-02-24 15:09:26

标签: c++ visual-studio-2008 typedef tchar

我遇到了一个问题,试图自己输入一个非常方便的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)

尝试编译时出现编译器错误。 “ERROR here(1)”中的错误是:

  

错误3错误C2871:'std':具有此名称的命名空间不存在\ nisampleclient \ nisampleclientdefs.h 16

如果我删除using namespace std;声明并将ERROR HERE(2)更改为typedef std::basic_string<TCHAR> tstring;,则会收到错误消息:

  

错误3错误C2653:'std':不是类或命名空间名称\ nisampleclient \ nisampleclientdefs.h 23

而是在那一点上。

提前致谢。 :)

2 个答案:

答案 0 :(得分:7)

包括string标题(#include <string>,而非string.h;))。

此外,请勿使用:

using namespace ...

...在标题中,除非你想要打倒你的开发者的愤怒;)

附注:在C ++中,大多数传统的C标准标头都有没有.h扩展但有前导c的对应部分。在你的情况下,#include <cstdlib>将是更好的选择,尽管它取决于你使用的编译器是否存在实际差异。

答案 1 :(得分:5)

std::basic_string类模板有三个参数。所以你要做到这一点:

 #include <string> //include this

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