使用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会对此产生影响吗?我可能会遗漏的其他东西?
答案 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.cpp
,functions.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
中