比较测试失败:unorder_map上的[]操作符产生的参数数量错误

QCompare test failure : wrong number of arguments produced by the [] operator on an unorded_map

本文关键字:操作符 参数 错误 数数 失败 测试 unorder 上的 map 比较      更新时间:2023-10-16

使用c++/Qt5,我坚持在MyMap对象上进行QCOMPARE测试。这个MyMap对象有一个名为"map"的属性,它是一个unorded_map (vector <</p>

测试如下:

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对象的其他测试没有问题。那么,我的错误在哪里?

宏QCOMPARE需要用逗号分隔两个参数。如果参数包含逗号,则必须将其放入括号()中。

因此

:

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

您可以阅读:http://gcc.gnu.org/onlinedocs/cpp/Macro-Arguments.html