2010-06-07 78 views
2
std::map< std::string , std::string > matrix_int; 
typedef std::pair< std::string , std::string > lp_type; 
BOOST_FOREACH(lp_type &row, matrix_int){ 

} 

這不能遵守: 錯誤C2440:初始化:不能從 '的std ::對< _Ty1,_Ty2>' 轉換爲 'lp_type &'升壓每個問題

時,我有','在元素類型中,boost doc說我可以使用typedef或者預定義var; 但我想要獲得參考時該怎麼辦?

+0

你打算修改'row'嗎? – kennytm 2010-06-07 14:29:48

回答

10

您的typedef不正確;它需要是:

typedef std::pair< const std::string , std::string > lp_type; 
       ^note the added const 

映射對中的關鍵元素是const限定的。

使用value_type typedef會稍微乾淨些;這種方式你不重複的類型信息:

typedef std::map<std::string, std::string> map_t; 
map_t matrix_int; 
BOOST_FOREACH(map_t::value_type& row, matrix_int){ 

} 
+2

雖然技術上是正確的,但我會爭辯說,使用地圖的內部typedef'value_type'會更好,因爲它不會暴露這種複雜性。 – 2010-06-07 14:36:58

+0

@Matthieu:是的;三個人說,當我編輯時加入這個建議。 :-我全心全意同意。 – 2010-06-07 14:39:58

1

我覺得詹姆斯McNellis是正確的。我會添加一個建議,即利用std :: map提供的value_type typedef。然後你的代碼可能看起來像這樣:

typedef std::map< std::string , std::string > MyMap; 
MyMap matrix_int; 

BOOST_FOREACH(MyMap::value_type &row, matrix_int){ 

}