문제

다음 코드에 문제가 있습니다.

#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)는 다음과 같습니다.

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

왜 MessagePointer의 목록에 반복기를 만들 수 없는지 궁금합니다.

어떤 아이디어?

고맙습니다.

도움이 되었습니까?

해결책

std::list<MessagePointer> 코드에는 종속 유형이 있습니다 (예 : 템플릿 인수 유형에 따라 다름). 결과적으로 사용해야합니다 typename 그것을 말하면 ::iterator 모든 잠재적 인스턴스화에 대한 유형이 될 것으로 예상됩니다 (전문화 된 경우 일부는 값이 될 수 있으므로). 그래서:

typename std::list<MessagePointer>::iterator ib = message_queue_.begin();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top