2011-03-24 110 views
3

在下面的代碼:升壓C++宏參數計數錯誤

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

我得到這個錯誤:

error: macro "BOOST_FOREACH" passed 3 arguments, but takes just 2

我只是路過2個參數,這是怎麼回事?

+0

http://stackoverflow.com/questions/716865/c-boost-any-gotchas-with-boost-foreach/716872#716872 – phooji 2011-03-24 04:05:20

+0

和:HTTP: //stackoverflow.com/questions/2104208/is-it-possible-to-use-boostforeach-with-stdmap – GManNickG 2011-03-24 04:28:17

回答

7

第一類被解析爲兩個參數,因爲它包含了一個逗號。 作爲一種變通方法,你可以的typedef類型:

typedef std::pair<PID, bool> PID_bool_pair; 
BOOST_FOREACH(PID_bool_pair &itval, completedEs_) { 
    ... 
} 
2

你不能這樣做,因爲的BOOST_FOREACH宏侷限,把它改寫喜歡:

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