повышение для каждой проблемы - PullRequest
2 голосов
/ 07 июня 2010
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 :: pair <_Ty1, _Ty2>» в «lp_type &»

когда у меня есть ',' в типе элемента, boost doc говорит, что я могу использовать typedef или предопределить переменную; но что мне делать, если я хочу получить ссылку?

Ответы [ 3 ]

10 голосов
/ 07 июня 2010

Ваш typedef неверен; должно быть:

typedef std::pair< const std::string , std::string > lp_type;
                   ^ note the added 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 голосов
/ 07 июня 2010

См. Можно ли использовать boost :: foreach с std :: map? .

Похоже, вам нужно сделать:

typedef std::map< std::string, std::string > MyMap;
BOOST_FOREACH( MyMap::value_type& row, matrix_int ) {
}
1 голос
/ 07 июня 2010

Я думаю, что Джеймс МакНеллис прав.Я добавлю предложение, чтобы вы использовали * typedef value_type, который предоставляет std :: map.Тогда ваш код может выглядеть так:

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

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

}
...