使用 c++/Qt5,我坚持对 MyMap 对象进行 QCOMPARE 测试。这个 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 operator[] 是这样声明的:
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 对象的其他测试都可以。那么,我的错误在哪里?