为什么在头文件中的using namespace std到了源文件中就无效呢?

时间:2021-07-30 10:03:09
为了使用string和wstring,我在头文件里使用了
#include <iostream>
using namespace std;
然后在这个头文件里定义了一个类和它的若干个方法

而后我在源文件里包含了这个头文件,并在这个源文件里实现了这个类的方法。

但是奇怪的地方来了,我必须在源文件里再次
using namespace std;

否则VC就报告说“wstring不明确”,这是为什么呢,头文件里已经用过了啊,按理说头文件里的内容都会出现在包括头文件的源文件中啊

5 个解决方案

#1


wstring要包含头<string>

#2


引用 1 楼 amoyman 的回复:
wstring要包含头<string>


我尝试过string.没用,头文件里包含了string,源文件里必须再来一次,这很奇怪

#3


能不能看看你的头文件?是不是源文件中设置了某个条件(比如#define)导致没有真正引用头文件?

#4


记得在C++ Primer中看到一个段落.似乎是说头文件中不要使用std的命名空间而要用完全的名称,原因大概是这样的,想想这样一种情况,在头文件中定义了命名空间,而你又同时使用了命名空间......我不知道怎么形容,就好像自己用自己,但这不是递归,显然定义是需要有源头的,所以书中专门说头文件中不要有这样的东西,看的有一段时间了,记得不太清楚,我觉得是因为这个

#5


#ifndef
#define


#endif
需要这个么?

#1


wstring要包含头<string>

#2


引用 1 楼 amoyman 的回复:
wstring要包含头<string>


我尝试过string.没用,头文件里包含了string,源文件里必须再来一次,这很奇怪

#3


能不能看看你的头文件?是不是源文件中设置了某个条件(比如#define)导致没有真正引用头文件?

#4


记得在C++ Primer中看到一个段落.似乎是说头文件中不要使用std的命名空间而要用完全的名称,原因大概是这样的,想想这样一种情况,在头文件中定义了命名空间,而你又同时使用了命名空间......我不知道怎么形容,就好像自己用自己,但这不是递归,显然定义是需要有源头的,所以书中专门说头文件中不要有这样的东西,看的有一段时间了,记得不太清楚,我觉得是因为这个

#5


#ifndef
#define


#endif
需要这个么?