gpt4 book ai didi

c++ - QCompare 测试失败 : wrong number of arguments produced by the [] operator on an unorded_map

转载 作者:行者123 更新时间:2023-11-28 02:47:38 24 4
gpt4 key购买 nike

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

最佳答案

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

因此:

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

您可能会读到:http://gcc.gnu.org/onlinedocs/cpp/Macro-Arguments.html

关于c++ - QCompare 测试失败 : wrong number of arguments produced by the [] operator on an unorded_map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23913298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com