我遇到了一个问题,试图自己输入一个非常方便的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
提前致谢。 :)
答案 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;