首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Qt的foreach的自定义容器要求

使用Qt的foreach的自定义容器要求
EN

Stack Overflow用户
提问于 2009-11-17 05:57:39
回答 2查看 1.7K关注 0票数 8

创建一个可以与Qt foreach宏一起工作的自定义容器的最小代码量是多少?

到目前为止,我有这个

代码语言:javascript
运行
复制
template< class T >
class MyList
{
public:
  class iterator
  {
  public:

  };
  class const_iterator
  {
  public:
    inline iterator& operator++ ()
    {
      return *this;
    }
  };
};

我得到了这个编译器错误:

代码语言:javascript
运行
复制
4>.\main.cpp(42) : error C2100: illegal indirection
4>.\main.cpp(42) : error C2440: 'initializing' : cannot convert from 'MyList<T>::const_iterator' to 'int'
4>        with
4>        [
4>            T=int
4>        ]
4>        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

当我尝试编译这段代码时:

代码语言:javascript
运行
复制
  MyList<int> mylst;
  foreach(int num, mylst )
    qDebug() << num;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-17 06:25:29

我省略了我使用的虚拟实现,但这是为我编译的:

代码语言:javascript
运行
复制
template< class T >
class MyList
{
public:
    class const_iterator
    {
    public:
        const T& operator*();
        bool operator!=( const const_iterator& ) const;
        const_iterator& operator++();
    };

    const_iterator begin() const;
    const_iterator end() const;
};
票数 10
EN

Stack Overflow用户

发布于 2009-11-17 06:30:41

作为免责声明,我不确定这是否可能。

查看qglobal.h中foreach的定义。看起来你可能需要定义一个beginend方法。

在我的系统上,它位于$QtInstallDir/src/corelib/global/qglobal.h

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1745123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档