gpt4 book ai didi

c++ - std::list of boost::shared_ptr 的迭代器问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:30 26 4
gpt4 key购买 nike

我在使用以下代码时遇到问题:

#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();

关于c++ - std::list of boost::shared_ptr 的迭代器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1815075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com