1

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

主文件

using namespace std;

#include "functions.h"

main () {}

函数.h

#include <vector>

函数.cpp

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

编辑:我很欣赏所有响应者都知道他们在说什么的事实,但这通常对我有用。使用makefile会对此有任何影响吗?还有什么我可能会错过的吗?

4

4 回答 4

10

是的,但在这个例子functions.cpp中没有看到using namespace std,因为你只在main.cpp.


不要添加using namespace stdfunctions.h, 用于std::限定类型。添加 ausing..会给标题的用户带来不必要的负担。

于 2012-08-28T11:25:37.397 回答
8

您需要限定命名空间:

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

你有一个using namespace stdin main.cpp,它不能被 看到functions.cpp。这就是问题的根源。

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

于 2012-08-28T11:25:47.833 回答
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指令不应影响对指令没有直接可见性的翻译单元。

于 2012-08-28T11:25:23.160 回答
1

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

 std::vector<int> x;

在你的源文件functions.cpp

于 2012-08-28T11:26:35.737 回答