Ошибка теста QCompare: неверное количество аргументов, выданных оператором [] в unorded_map

Используя c ++ / Qt5, я застрял с тестом QCOMPARE на объекте MyMap. Этот объект MyMap имеет атрибут с именем «map», который является unorded_map (vector < int, int> → QString).

Вот тест:

void TestMyMap::test(void)
{
MyMap mymap = {
{ {{ {1,2}, {3,4} },}, QString("example1") },
{ {{ {1,2}, {3,5} },}, QString("example2") },
{ {{ {1,2}, {3,8} },}, QString("example3") },
};

QCOMPARE( mymap.size() , (std::size_t)3 );                   // OK
QCOMPARE( mymap[{{ {1,2}, {3,8} }}] , QString("example3") ); // BOOM !
}

В последней строке я получил следующую ошибку: (мой перевод из локализованного исходного сообщения):

error : the macro 'QCOMPARE' got 5 arguments but it takes only 2

Я не понимаю как mymap [{{{1,2}, {3,8}}}] Можно как-то «выдать» 4 аргумента.

Оператор MyMap [] объявлен так:

QString& operator[]( std::vector< std::pair<int, int> > key );

QString& MyMap::operator[]( std::vector< std::pair<int, int> > key)
{
return this->map[key];
}

Объект MyMap объявлен так:

class MyMap {
public:
// PosRanges is a wrapper for vector < int, int >
std::unordered_map<PosRanges, QString, PosRangesHasher> map;

public:
MyMap(std::initializer_list< IntegersAndAString >);
QString& operator[]( std::vector< std::pair<int, int> > key );
size_t  size(void);
};

Другие тесты на объектах MyMap в порядке. Итак, где моя ошибка?

0

Решение

Макрос QCOMPARE ожидает два аргумента, разделенных запятой. Если аргумент содержит запятые, вы должны поместить его в скобки ().

Следовательно:

QCOMPARE( ( mymap[{{ {1,2}, {3,8} }}] ) , QString("example3") )
^                           ^

Вы можете прочитать: http://gcc.gnu.org/onlinedocs/cpp/Macro-Arguments.html

2

Другие решения


По вопросам рекламы [email protected]