QVector::contains терпит неудачу при проверке констант

Среда, как указано в тегах:

GCC 64-разрядная, Qt 5.12

У меня есть следующий пример кода:

// test.h

#include <QVector>

class Test 
{
    Test();

    // Same results with QSet
    const QVector<int> things = {
        BANANA,
        RASPBERRY,
        APPLE,
        -2500,
    };

    const int BANANA = -1000;
    const int RASPBERRY = -2000;
    const int APPLE = -3000;
};
// test.cpp

#include <QDebug>
#include "test.h"

Test::Test()
{
    qDebug() << things.contains(APPLE); // false, expected true
    qDebug() << things.contains(-3000); // false, expected true
    qDebug() << things.contains(-2500); // true, expected true
}

Я не понимаю, сделал ли я что-то не так в определениях или обнаружил ошибку в Qt.

1 ответ

Решение

Кажется, я пытался использовать постоянные переменные, которые еще не определены

// test.h

#include <QVector>

class Test 
{
    Test();

    // Moved them above QVector
    const int BANANA = -1000;
    const int RASPBERRY = -2000;
    const int APPLE = -3000;

    const QVector<int> things = {
        BANANA,
        RASPBERRY,
        APPLE,
        -2500,
    };
};
// test.cpp

#include <QDebug>
#include "test.h"

Test::Test()
{
    // Now the tests pass as expected
    qDebug() << things.contains(APPLE); // true, expected true
    qDebug() << things.contains(-3000); // true, expected true
    qDebug() << things.contains(-2500); // true, expected true
}

Не ошибка в QT!

Другие вопросы по тегам