Ошибка подсчета аргументов макроса в C ++ - PullRequest
3 голосов
/ 24 марта 2011

В следующем фрагменте кода:

BOOST_FOREACH(std::pair<PID, bool> &itval, completedEs_) {
    allCompleted &= it->second;
}

Я получаю эту ошибку:

ошибка: макрос "BOOST_FOREACH" прошел 3 аргументы, но занимает всего 2

Я передаю только 2 аргумента, что происходит?

Ответы [ 2 ]

7 голосов
/ 24 марта 2011

Первый тип анализируется как два аргумента, поскольку он содержит запятую. В качестве обходного пути вы можете ввести typedef:

typedef std::pair<PID, bool> PID_bool_pair;
BOOST_FOREACH( PID_bool_pair &itval, completedEs_) {
    ...
}
2 голосов
/ 24 марта 2011

Вы не можете сделать это из-за ограничений макроса BOOST_FOREACH, перепишите его так:

//...
typedef std::pair<PID, bool> mypair;
BOOST_FOREACH(mypair &itval, completedEs_) {
    allCompleted &= it->second;
}
//...
...