2014-02-18 71 views
1

我有一個結構:結構不可分配?

struct Handle 
{ 
public: 
    const unsigned long Id; 
    const std::type_index Index; 
    Handle() : Id(-1), Index(std::type_index(typeid(Event))){} 
    Handle(unsigned long id, std::type_index index) : Id(id), Index(index) {} 
}; 

但是當我嘗試將其分配給一個變量,我得到

錯誤10錯誤C2582:「運算符=」的功能是在「事件處理程序不可用::處理'

爲什麼? (我正在使用結構體,因爲據我所知它們是作爲數據類型處理的,並且可以從函數返回而不用新創建。是否正確?)

+6

如果你的成員是'const',那麼他們就不能被指定爲像賦值那樣。 – chris

回答

12

默認賦值運算符不會爲Handle生成,因爲它會不合格。它所做的只是簡單地指定成員,並且在const成員顯然不允許。

相反,不要聲明它們const。如果他們不打算在賦值運算符之外進行修改,只需將它們放在private部分中,並且不提供允許修改的界面。