2013-04-12 78 views
1

我目前正在嘗試使用Microsoft Visual Studio 2012來編譯一個相當大的項目。我發現它編譯得很好,但是使用這個版本時我收到了錯誤無論使用哪一個std::list只有一個模板參數。std :: list抱怨缺少第二個模板參數(分配器)

error C2976: 'std::list' : too few template arguments 

在所有其他項目,並創建一個新項目的時候,我可以使用std::list與默認的分配就好了,所以我猜它可能必須做一些與2012 MSVC但我無言以對什麼可能是。

+5

在發生錯誤的地方發佈代碼? – Pubby

+1

如果您發佈了一個意外無法使用MSVC 2012進行編譯的最小測試用例,它將有所幫助。 – NPE

+1

也許某些頭文件不包括在內?例如你有'std :: list '的前向聲明,沒有定義? – kassak

回答

4

創建SSCCE正是問題所在:這是一個龐大的項目,我無法在新項目中重現問題。

定義_VARIADIC_MAX=10後,問題變得更加明顯,它將錯誤消息轉換爲error C2027: use of undefined type 'std::list'

事實證明,有包括mapset且包含前瞻性聲明以std::list其他幾個標題:添加在一些地方缺少#include <list>定了!

我不確定爲什麼這個編譯在其他平臺和MSVC10上,但可能這些系統中的STL頭結構不同。

也感謝@kassak提示,它當然有幫助!

+3

不要寫前向標準庫類型的聲明。允許實現添加具有默認值的模板參數,因此您可能會冒險讓聲明出錯。 –

+0

剛剛在VC2013中發現完全相同的問題。 – JeremyFromEarth

相關問題