Problème avec les itérateurs pour std :: list of boost :: shared_ptr
-
06-07-2019 - |
Question
Je rencontre un problème avec le code suivant:
#include <list>
#include <boost/shared_ptr.hpp>
#include "Protocol/IMessage.hpp"
template <typename HeaderType>
class Connection {
public:
typedef IMessage<HeaderType> MessageType;
typedef boost::shared_ptr<MessageType> MessagePointer;
template <typename Handler>
void
FlushMessageQueue(Handler handler) {
std::list<MessagePointer>::iterator ib = message_queue_.begin(); // line 69
std::list<MessagePointer>::iterator ie = message_queue_.end();
for (; ib != ie; ++ib) {
AsyncWrite(*ib, handler);
}
}
private:
std::list<MessagePointer> message_queue_;
};
gcc (4.2.1) me dit:
include/Network/Connection.hpp: In member function 'void Network::Connection<MT>::FlushMessageQueue(Handler)':
include/Network/Connection.hpp:69: error: expected `;' before 'ib'
Je me demande pourquoi je ne peux pas créer d'itérateur pour une liste de MessagePointer.
Des idées?
Merci.
La solution
std::list<MessagePointer>
dans votre code est un type dépendant (c’est-à-dire qu’il dépend du type d’un argument de modèle). Par conséquent, vous devez utiliser typename
pour indiquer que ::iterator
doit être un type pour toutes les instanciations potentielles (car il peut s'agir d'une valeur pour certaines d'entre elles, si elles sont spécialisées). Donc:
typename std::list<MessagePointer>::iterator ib = message_queue_.begin();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow