質問

次のコードに問題があります:

#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