2013-03-12 29 views
0

我使用Visual Studio C++ 2010編譯錯誤用typedef性病

我有一個頭文件,GNode.h,低於SNIPPIT:

#ifndef GNODE_H 
#define GNODE_H 
#include <vector> 

typedef vector<int> ADJNODE_LIST; 

我會在Error: vector is not a template錯誤2號線vector

然而,當我添加std::vector這樣:

typedef std::vector<int> ADJNODE_LIST; 

沒有編譯錯誤。

它似乎找不到<vector>庫。

任何人都可以解釋爲什麼?

回答

3

因爲矢量存在於std命名空間中。

你可以把它看作是已經被定義爲:

namespace std { 
    template<typename T, ...> 
    class vector { 
     ... 
    }; 
} 

你包括被稱爲vector文件,但訪問,你需要限定它與它的命名空間的類型,所以std::vector<int>,其中::是範圍界定操作員。

+1

謝謝非常! – ali 2013-03-12 08:53:39

+0

你的答案有點混亂。它幾乎聽起來像你建議將代碼包裝在'namespace std {...}'中...... – 2013-03-12 08:56:51

-5

它可以,但它被稱爲命名空間的東西包圍。

空間外面(例如,你的程序),你沒有訪問命名空間內的元素

可以使用

using namespace std; 

或者附加STD命名空間中的一切與std::

+5

不,不要鼓勵人們拖拽標題中的整個名稱空間標準。這是不好的做法 – 2013-03-12 08:55:28

+0

仍然是一種選擇,也是最簡單的! – 2013-03-12 09:00:19

+0

@arashkordi告訴我如何在世界上比使用'std ::'預先考慮所有事情更容易。 (事實上​​,'std ::'更容易,因爲當你使用namespace std;時,你會得到(並且應該得到)可怕的命名衝突。) – 2013-03-12 09:01:25