不允许使用C ++名称空间类型名称

时间:2014-04-28 12:18:52

标签: vector stl namespaces

我遇到了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名称空间!

1 个答案:

答案 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;