void func(std::array<float, 3>& a)
{
float x = a[0];
std::cout << x << std::endl;
}
这是一个简单的示例函数,编译时,a[0]这里出错了,没有与这些操作数匹配的"[]"运算符。
因为array显然可以用"[]",类似代码在其他地方运行也很好,所以折腾好久。
这里说一下结果:
添加#include <array>,解决。
为什么没有include array没有编译报错呢,因为文件前面有一个#include <utility>,<utility>里面有:
// TUPLE INTERFACE TO array
template <class _Ty, size_t _Size>
class array;
<array>里有:
// CLASS TEMPLATE array
template <class _Ty, size_t _Size>
class array { // fixed size array of values
public:
using value_type = _Ty;
using size_type = size_t;
using difference_type = ptrdiff_t;
using pointer = _Ty*;
using const_pointer = const _Ty*;
... ...
}
utility里有array的声明,所以不报错,但这个声明是不完整类型。
不完整类型只能用于定义指针和引用,要使用这个类型,必须#include <array>,里面有array的定义。