所以我有一段我试图测试的代码。代码检查一些向量(这些是结构的元素)在某些点上等同于已知向量,但是我遇到了一个问题。当我尝试将矢量与已知矢量进行比较时,如下所示,
assert((class1.getattr().getattr().getVec(key) == {4,3,2,2}))
我收到以下错误:
assertAll.cpp:105:82: error: could not convert ‘{4,3,2,2}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<int>’
其余的代码都是正确的,并且断言的lval绝对是应该的向量。我正在用标志编译,-std = c ++ 11 -Wall -Wextra -pedantic -O in g ++。有人知道如何解决这个问题吗?有没有办法将括号括起来的初始化列表强制转换为向量,还是有更好的方法可以做到这一点?
答案 0 :(得分:1)
有人知道如何解决这个问题吗?有没有办法将括号括起初始化列表强制转换为向量
有趣的是,当我尝试类似的东西时,我在Clang 3.5和GCC 4.9.2上得到一个完全不同的错误,但你可以使用初始化列表语法来构建一个向量(我猜不太强调类型):< / p>
assert((class1.getattr().getattr().getVec(key) == std::vector<int>{4,3,2,2}))
我不确定如何在Coliru等上运行代码,但下面的代码在GCC 4.9.2中使用g++ -std=c++11 -Wall -pedantic
#include <cassert>
#include <vector>
std::vector<int> foo() {
return {1,2,3,4};
}
template<class T>
bool is_equal(const T& a, const T& b) {
return a == b;
}
int main()
{
assert((foo() == std::vector<int>{1,2,3,4}));
assert(is_equal(foo(), {1,2,3,4}));
assert([&](std::vector<int> v) -> bool {
return foo() == v;
}({1,2,3,4}));
}
当然,正确思想中的任何人都不会使用这样的lambda,但正如您可能从示例中所知,您基本上只需要告诉编译器双方是相同的类型以获得它将初始化列表转换为向量。