The problem with iterators for std :: list boost :: shared_ptr

I am having a problem with the following code:

#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) tells me:

 include/Network/Connection.hpp: In member function 'void Network::Connection<MT>::FlushMessageQueue(Handler)': include/Network/Connection.hpp:69: error: expected `;' before 'ib' 

I wonder why I cannot create an iterator for the MessagePointer list.

Any ideas?

Thanks.

+4
source share
1 answer

std::list<MessagePointer> in your code is a dependent type (i.e. depends on the type of the template argument). Therefore, you need to use typename to indicate that ::iterator should be a type for all potential instances (since this might be the value for some of them if they are specialized). So:

 typename std::list<MessagePointer>::iterator ib = message_queue_.begin(); 
+11
source

All Articles