2013-04-28 24 views
1

我想創建一個類的向量,我只是設置,我不斷收到錯誤。任何人都可以給我一些建議嗎?這裏是我的相關代碼:C++不能創建用戶定義的類的向量

class process{ 
    public: 
     enum state {New,Ready,Running,Waiting,IO,Terminated}; 
     double CPUburst[MAXCPUBURSTS]; 
     double IOburst[MAXCPUBURSTS-1]; 
     int nCPUbursts; // The number of CPU bursts this process actually uses 
     int priority, type; // Not always used 
     int currentBurst; // Indicates which of the series of bursts is currently being handled 
}; 

vector<process> processTable; 

我得到的錯誤是:

"template argument for 'template<class _Alloc> class std::allocator' uses local type 'main(int, char**)::process*'"

+4

您是否意外地在主要方法中定義了類? – Antimony 2013-04-28 04:11:57

+0

@Antimony我不知道爲什麼這很重要。在我的main()方法中,我沒有定義類和向量的問題。 – WhozCraig 2013-04-28 04:14:31

+0

http://ideone.com/5s5ZOe工作正常,所以我相信銻是正確的。 – GRAYgoose124 2013-04-28 04:14:31

回答

5

我想你已經定義class processmain

從標準(較舊)

本地型,無鍵的類型,未命名的類型或任何這些類型的複合型不應被用作模板參數的用於模板輸入參數。

但是,這在C++ 11及更高版本中已經改變。

因此,在全局範圍內定義類或使用支持此功能的編譯器(或啓用)。在g ++中,您可以使用-std=c++0x-std=c++11啓用此版本,具體取決於版本。

+1

這不是*當前*標準所說的。這條規則在C++ 03的14.3.1節中發現,現在簡直不存在了。 – 2013-04-28 04:15:16

2

銻已經解碼了您的代碼中的相關細節,您不必提及。

此修復程序旨在在您的編譯器中啓用C++ 11支持(通常爲-std=c++11-std=gnu++11)。 C++ 03不允許使用本地類作爲模板參數。 C++ 11的確如此。

+0

+1我老實說永遠不會知道那以前是受限制的。我知道當地的* functors *是不允許的,但從來不知道一般的地方課程。希望我也可以贊成銻。多謝你們。 – WhozCraig 2013-04-28 04:18:58

+0

@WhozCraig:本地仿函數*被允許,但是由於這個限制,你無法用它們做很多事情。 – 2013-04-28 04:19:45

+0

我從來不知道他們!我想這是有原因的,因爲我本來無法使用它們,因爲本地仿函數可能正是我的用例。 – 2013-04-28 06:46:11