2014-04-03 66 views
2

代碼部分:靜態常量映射初始化列表與struct?

struct id_s { 
    std::string name1; 
    std::string name2; 
}; 

static const std::map<uint8_t, id_s> list = { 
    { 0x00, { "Fred", "Apple" } }, 
    { 0x01, { "John", "Banana" } }, 
    { 0x02, { "Mark", "Mango" } } 
}; 

int main() 
{ 
    for(const auto& it: list) { 
     std::cout<<it.first<<"\t"<<it.second.name1<<"\t"<<it.second.name2<<std::endl; 
    } 
    return 0; 
} 

問題是,一旦初始化所有字段都正確分配,除了「約翰」和「標記」,這是保留爲「」。

如何正確地分配這與C++ 11初始化列表?從2013 VS調試控制檯

輸出:

http://oi57.tinypic.com/2nqduea.jpg

+1

這是使用初始化列表分配值的正確方法。你能從控制檯顯示你的輸出(屏幕截圖)嗎? –

+0

我已經添加了截圖的鏈接,我無法嵌入信譽不足...... – user3443139

+0

我已驗證此代碼確實的行爲與Visual Studio 2013中描述的一致。 –

回答

0

的Visual Studio 2013更新2剛剛修正了這個錯誤。

0

這是正確的方式來initialize.I已經跑你的程序和使用的使用下面的代碼

for(const auto& it: lst) { 
std::cout<<it.first<<"\t"<<it.second.name1<<"\t"<<it.second.name2<<std::endl; 
} 
到打印在控制檯

輸出

 Fred Apple 
0x1 John Banana 
0x2 Mark Mango 

我跑這個程序的Linux機器。我使用的是完全符合C++ 11標準的gcc4.8.1。我沒有使用VS2013,但是如果你像上面一樣使用它,並且沒有得到正確的初始化值,那麼可能會出現問題/錯誤VS2013,因爲它可能沒有初始化器列表的完整實現。

順便說一句,你不應該使用標準中定義的變量名(列表)。這不是一個好習慣。

編輯

看起來它是已知的bug在VS2013,你可以找到從以下SO職位的相關信息。

https://stackoverflow.com/a/19646517/2724703

+1

謝謝。我懷疑這可能是VS2013的問題。 別擔心,當我在這裏快速創建這個問題時,「list」變量才被使用。 :) – user3443139

+0

@ user3443139:查看我編輯的帖子。它看起來像VS2013中的已知錯誤。 –

+0

非常感謝你們! – user3443139