2015-11-04 63 views
2

所以我有這樣的代碼行:的std ::對被調用默認的構造函數爲其成員之一

statesArray.push_back(std::pair<States, StateSettings>(States::funMode, StateSettings(1, 2, 3, 4, 5, 6))); 

statesArrayQVector<std::pair<States, StateSettings> >類型的對象。

StateSettings類有這兩個構造函數(從巫婆默認一個被刪除):

StateSettings() = delete; 
StateSettings(int a, int b, int c, int d, int e = 0, int f = 0); 

編譯時,我得到這個錯誤:

Error 2 error C2280: 'StateSettings::StateSettings(void)' : attempting to reference a deleted function. 

爲什麼std::pair試圖調用已刪除默認的構造函數,如果我傳遞一個對象顯式構造一個非默認的構造函數?

我該如何解決這個問題?

+5

從Qt的參考:*「存儲在不同的容器中的值可以是任意分配的數據類型,以確定是否符合,類型必須提供一個默認的構造函數,一個拷貝構造函數和一個賦值運算符。「* –

+0

[這可能會在C++ 17中修復。](http://en.cppreference.com/w/cpp/utility/對/對) – dasblinkenlight

+0

@PiotrSkotnicki是的,這是問題所在。切換到'std :: vector',現在一切正常。謝謝。 –

回答

3

作爲commented by Piotr Skotnicki,該值類型存儲在QVectorQt Standard specifies,以及任何其他的Qt通用容器,必須:

Be of any assignable data type. To qualify, a type must provide a default constructor, a copy constructor, and an assignment operator.

在問題指定顯然不符合這些條件的值的類型。

一個解決這個越來越可能的方式將是指針存儲的值:

QVector<std::pair<States, StateSettings>*> statesArray; 
相關問題