2011-01-27 30 views
4

我遇到了此問題標題中提到的錯誤。該代碼片段看起來是這樣的:錯誤:分配的只讀位置<unnamed> :: g_namesmap

namespace 
{ 
    struct myOptVar * g_optvar = 0; 

    //Variable that stores map of names to index 
    std::map<std::string, const size_t> g_namesmap; 
}; 

void Optimizations::generate() 
{ 
    // free current optvar structure 
    free(g_optvar); 

    //clear our names map 
    g_namesmap.clear(); 

    // create new optvar structure 
    const unsigned int size = g_items.size(); 
    g_optvar = (struct myOptVar*)calloc(size, sizeof(struct myOptVar)); 

    //copy our data into the optvar struct 
    size_t i=0; 
    for (OptParamMapConstIter cit=g_items.begin(); cit != g_items.end(); cit++, i++) 
    { 
     OptimizationParameter param((*cit).second); 
     g_namesmap[(*cit).first] = i; //error occurs here 

    ... 

g_namesmap聲明,並在未命名的命名空間中定義,它爲什麼認爲是「只讀」?

回答

5

因爲你的地圖data_type聲明與const預選賽:

std::map<std::string, const size_t> g_namesmap; 

當您使用[]運營商與std::map,它返回到與指定key_type值相關聯的data_type對象的引用。在這種情況下,你的data_typeconst size_t,所以當然你不能指定它。

你需要在地圖聲明爲:

std::map<std::string, size_t> g_namesmap;