无法附加自定义类的 qlist

  • 本文关键字:qlist 自定义 c++ macos qt5
  • 更新时间 :
  • 英文 :


我在这里看到了其他问题,但它们处理指针或qobject派生类,所以它们似乎不相关。

我正在尝试将值附加到自定义类的 qlist 中,这是类

class matchPair
{
public:
    matchPair(int a=0, int b=0)
        : m_a(a)
        , m_b(b)
    {}
    int a() const { return m_a; }
    int b() const { return m_b; }
    bool operator<(const matchPair &rhs) const { return m_a < rhs.a(); }
//    matchPair& operator=(const matchPair& other) const;
private:
    int m_a;
    int m_b;
};
class videodup
{
public:
    videodup(QString vid = "", int m_a = 0, int m_b = 0);
    ~videodup() {}
    QString video;
    bool operator==(const QString &str) const { return video == str; }
//  videodup& operator=(QString vid, int m_a, int m_b);
    QList<matchPair> matches;
};
struct frm
{
    QString file;
    int position;
    cv::Mat descriptors;
    QList<videodup> videomatches;
};
QList<frm> frames;

失败的行是:

frame.videomatches.at( frame.videomatches.indexOf(vid) ).matches.append(pair);

我得到的错误是:

/usr/local/Cellar/qt5/5.5.1_2/lib/QtCore.framework/Headers/qlist.h:191: candidate function not viable: 'this' argument has type 'const QList<matchPair>', but method is not marked const
    void append(const T &t);
         ^

我做错了什么?

你试图将一个值附加到一个const QList<T>,这意味着你的QList<T>是常量的,即不可变的。仔细观察,错误读取this has type const QList<matchPair>,并且您只能在const对象上调用const方法,而append()显然在语法和语义上都没有const。修复QList<matchPair>const

编辑 2:

仔细查看代码后,确实是罪魁祸首:

frame.videomatches.at( frame.videomatches.indexOf(vid) ).matches.append(pair);
                   ^^

QList<T>::at()返回const T&,这导致了我上面描述的问题。使用 QList<T>::operator[]() insdead,它具有同时返回 const TT 值的重载。

编辑:

但是,这是哪个编译器品牌和版本?我无法通过在模板化和非模板化的const类对象上调用非const方法来在 g++ 中重现此错误消息(我收到错误,但它的措辞不同)。

相关内容

  • 没有找到相关文章

最新更新