我遇到了C ++命名空间的问题
我想为某个框架的迭代器设置一个矢量快捷方式。 这完全没问题。
using namespace std;
using namespace GS;
typedef vector<vector<String> >::const_iterator table_iter;
但是,这会产生“错误:现在允许输入类型名称。”
//using namespace std;
using namespace GS;
typedef vector<vector<String> >::const_iterator table_iter;
String
实际上是GS::String
,我不想在我的头文件中使用using namespace xxx
。所以我认为这应该有用
//using namespace std;
//using namespace GS;
typedef vector<vector<GS::String> >::const_iterator table_iter;
这也会产生“错误:现在允许输入类型名称。”
显然,我可以做到
using namespace std;
//using namespace GS;
typedef vector<vector<GS::String> >::const_iterator table_iter;
但为什么我需要std
?我认为命名空间GS
有一些关于使用std。
有没有办法做这样的事情?
typedef vector<vector<GS(YeahImUsingStd)::String> >::const_iterator table_iter;
提前致谢!
编辑:我无法编辑GS名称空间!
答案 0 :(得分:2)
vector
位于名称空间std
中,因此您需要使用前缀std::
:
using namespace GS;
typedef std::vector<std::vector<String> >::const_iterator table_iter;
或者,为了避免使用名称空间GS
:
typedef std::vector<std::vector<GS::String> >::const_iterator table_iter;
但是,因为你只需要标准库中的vector
,你也可以这样做:
using std::vector;
using namespace GS;
typedef vector<vector<String> >::const_iterator table_iter;
通过这种方式,您可以在编译器中使用vector
命名空间中的std::
,但不要使用所有命名空间。
但是你说你想避免头文件中的using namespace
。这通常是个好主意(包括using std::vector
),所以最好的解决方案是第二个:
typedef std::vector<std::vector<GS::String> >::const_iterator table_iter;