reference_wrapper导致"incomplete type is not allowed"

reference_wrapper cause "incomplete type is not allowed"

本文关键字:is not allowed type incomplete wrapper 导致 reference      更新时间:2023-10-16
#include <vector>
#include <array>
int main() {
typedef std::array<int,2> point;
typedef std::vector<std::reference_wrapper<point>> route;
std::vector<std::vector<point>> lattice = {
{point{ {0,0} },point{ {0,1} }},
{point{ {1,0} },point{ {1,1} }}
};
route r = {&lattice[0][0],&lattice[0][1]};
point last = r.back().get();
}

最后一行不会编译,因为"不允许不完整的类型"。当我在互联网上搜索时,一篇论文似乎解决了这个问题:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0357r3.html。那篇论文刚好高于我的水平。所以我不确定。有人会确认或解决这个问题吗?

此外,还赞赏解决方法:

我正在尝试将路由存储在一个不那么大的格子上。会有很多路线(密集在格子中(。所以,我在想,在一条路线中,存储点的参考而不是点,以节省内存。

在使用std::reference_wrapper之前必须#include <functional>

相关文章: