比较测试失败:unorder_map上的[]操作符产生的参数数量错误
QCompare test failure : wrong number of arguments produced by the [] operator on an unorded_map
使用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
相关文章:
- 我可以将C 17 Capture lambda ConstexPR转换操作符的结果用作函数指针模板非类型参数吗?
- 单参数构造函数和赋值操作符
- c++中的操作符重载,无法调用双参数构造函数
- 操作符重载模板参数
- c++操作符重载以指针类型作为参数
- 在覆盖new操作符时传递更多参数(c++)
- 带有不同参数的c++操作符重载模板
- 重载操作符=,不同的类作为参数
- 如何检查类型是否存在无参数操作符()
- 传递静态方法作为参数,不需要地址操作符
- 检索对象的函数操作符的参数类型
- 带有派生类型参数的赋值操作符
- 使用具有不同参数的相同操作符
- 为什么小于操作符接受不同类型的参数,而std::min不接受
- 将构造函数参数转发给放置new操作符
- (为什么)移动构造函数或移动赋值操作符应该清除其参数
- 对操作符()()中具有状态和两个参数的函数对象使用boost绑定
- 比较测试失败:unorder_map上的[]操作符产生的参数数量错误
- 操作符重载和不同的模板参数
- 重载操作符参数