`没有使用`namespace std;`和文件命名类型`错误

时间:2012-08-28 11:23:42

标签: c++ header namespaces

使用g++ main.cpp functions.cpp -o run编译下面的代码会给我一个错误error: ‘vector’ does not name a type。在main.cpp顶部声明命名空间通常适用于所有.cpp文件。

main.cpp

using namespace std;

#include "functions.h"

main () {}

functions.h

#include <vector>

functions.cpp

#include "functions.h"
vector <int> x;
编辑:我很欣赏所有响应者都知道他们在谈论什么,但这通常对我有用。使用makefile会对此产生影响吗?我可能会遗漏的其他东西?

4 个答案:

答案 0 :(得分:7)

是的,但在此示例中functions.cpp没有看到using namespace std,因为您只在main.cpp中写过。{/ p>


请勿将using namespace std添加到functions.h,请使用std::来限定类型。添加using..会对标头的用户造成不必要的负担。

答案 1 :(得分:7)

您需要限定命名空间:

#include "functions.h"
std::vector<int> x;

using namespace std中有main.cppfunctions.cpp无法看到它。这是问题的根源。

通常,您应该避免using namespace std,特别是在标题中。如果你真的必须把它包含在main中,请把它放在所有标题之后。

答案 2 :(得分:3)

您仅在std中导入main.cpp命名空间,而不是functions.cpp

您必须在第二个文件中限定使用 - std::vector,或使用using指令:

//functions.cpp
#include "functions.h"
std::vector <int> x;   // preferred

//functions.cpp
#include "functions.h"
using namespace std;
vector <int> x;

或(奖金)

//functions.cpp
#include "functions.h"
using std::vector;
vector <int> x;
  

在main.cpp顶部声明命名空间通常适用于所有.cpp文件。

然后你有一个非常有缺陷的编译器。 using指令不应影响对指令没有直接可见性的翻译单元。

答案 3 :(得分:1)

using namespace std仅限于main.cpp的本地。你需要使用

 std::vector<int> x;

在源文件functions.cpp