2012-08-28 151 views
-4

編譯下面的代碼與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

的main(){}是不合法的C++ – Cubic

回答

7

是的,但在這個例子中functions.cpp還沒有看到using namespace std因爲你只寫在main.cpp


不要添加using namespace stdfunctions.h,使用std::資格類型。添加using..會爲您的標題的用戶帶來不必要的負擔。

3

您只在main.cpp而不是functions.cpp中導入了std名稱空間。

必須限定你的使用 - 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指令不應影響對指令沒有直接可見性的翻譯單元。

7

您需要限定命名空間:

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

你有一個main.cppusing namespace std,它不能被functions.cpp可以看出。這是問題的根源。

通常,您應該避免使用using namespace std,特別是在標題中。如果您真的必須將其包含在main中,請將其放在所有標題後面。

+1

在downvote任何意見? – juanchopanza

+0

Downvotes plural – mathematician1975

+0

我會改變downvote爲upvote爲任何人誰說這通常適用於我的事實。即使你的答案只是推測。 –

1

using namespace std只在main.cpp本地。你需要在你的源文件functions.cpp使用

std::vector<int> x; 

相關問題