无法通过仅给出大小在 CPP std::vector<std::vector<uint8_t>> 中创建二维矢量
Unable to create 2D vector in CPP std::vector<std::vector<uint8_t>> by just giving the size
我在头文件中创建了一个空的 2D 矢量,只是提供了大小但无法创建它。
class Grid
{
public:
int rows = 5/0.05;
int cols = 6/0.05;
std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
};
我低于错误
no matching function for call to 'std::vector<std::vector<unsigned char> >::vector(int&, std::vector<int>)'
`error: 'rows' is not a type
19 | std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
| ^~~~
C:\Users\prave\Documents\projects\ExhaustiveSearchScanMatching\occupancy_grid.h:19:79: error: expected ')' before ',' token
19 | std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
| ~ ^
| )
C:\Users\prave\Documents\projects\ExhaustiveSearchScanMatching\occupancy_grid.h:19:79: error: expected ')' before ',' token
19 | std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
| ~ ^
| )
C:\Users\prave\Documents\projects\ExhaustiveSearchScanMatching\occupancy_grid.h:19:81: error: expected unqualified-id before numeric constant
19 | std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
| ^`
任何人都可以帮助解决这个问题。
您使用了两种不同的整数类型 uint8_t
和 int
。
你应该把它改成
std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
作为 Class 会员
要将向量初始化为 class 成员,该成员也依赖于其他 class 成员,您可以使用 class 构造函数。以下代码对我有用。
#include <vector>
#include <cstdint>
class grid {
public:
int rows = 5/0.05;
int cols = 6/0.05;
std::vector<std::vector<uint8_t>> grid_vector;
grid() : grid_vector(rows, std::vector<uint8_t>(cols, 0)) {}
};
您正在尝试创建一个包含 uint8_t 个向量的向量。然后你用一个 int 类型的向量构造那个向量,它期望一个 uint_8 类型的向量,因此没有匹配的函数错误消息。
要么将您的向量更改为 int 向量的向量:
std::vector<std::vector<int>> grid(rows, std::vector<int> (cols, 0));
或者将构造参数更改为 uint8_t:
类型的向量
std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
本次初始化
std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
的 class 数据成员不正确。编译器将这样的声明视为成员函数的声明。
您可以使用大括号或相等初始化。例如
class Grid
{
public:
int rows = 5/0.05;
int cols = 6/0.05;
std::vector<std::vector<uint8_t>> grid {rows, std::vector<uint8_t>(cols, 0)};
};
即用大括号而不是括号将初始化程序括起来。
我在头文件中创建了一个空的 2D 矢量,只是提供了大小但无法创建它。
class Grid
{
public:
int rows = 5/0.05;
int cols = 6/0.05;
std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
};
我低于错误
no matching function for call to 'std::vector<std::vector<unsigned char> >::vector(int&, std::vector<int>)'
`error: 'rows' is not a type
19 | std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
| ^~~~
C:\Users\prave\Documents\projects\ExhaustiveSearchScanMatching\occupancy_grid.h:19:79: error: expected ')' before ',' token
19 | std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
| ~ ^
| )
C:\Users\prave\Documents\projects\ExhaustiveSearchScanMatching\occupancy_grid.h:19:79: error: expected ')' before ',' token
19 | std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
| ~ ^
| )
C:\Users\prave\Documents\projects\ExhaustiveSearchScanMatching\occupancy_grid.h:19:81: error: expected unqualified-id before numeric constant
19 | std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
| ^`
任何人都可以帮助解决这个问题。
您使用了两种不同的整数类型 uint8_t
和 int
。
你应该把它改成
std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
作为 Class 会员 要将向量初始化为 class 成员,该成员也依赖于其他 class 成员,您可以使用 class 构造函数。以下代码对我有用。
#include <vector>
#include <cstdint>
class grid {
public:
int rows = 5/0.05;
int cols = 6/0.05;
std::vector<std::vector<uint8_t>> grid_vector;
grid() : grid_vector(rows, std::vector<uint8_t>(cols, 0)) {}
};
您正在尝试创建一个包含 uint8_t 个向量的向量。然后你用一个 int 类型的向量构造那个向量,它期望一个 uint_8 类型的向量,因此没有匹配的函数错误消息。
要么将您的向量更改为 int 向量的向量:
std::vector<std::vector<int>> grid(rows, std::vector<int> (cols, 0));
或者将构造参数更改为 uint8_t:
类型的向量std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
本次初始化
std::vector<std::vector<uint8_t>> grid(rows, std::vector<uint8_t>(cols, 0));
的 class 数据成员不正确。编译器将这样的声明视为成员函数的声明。
您可以使用大括号或相等初始化。例如
class Grid
{
public:
int rows = 5/0.05;
int cols = 6/0.05;
std::vector<std::vector<uint8_t>> grid {rows, std::vector<uint8_t>(cols, 0)};
};
即用大括号而不是括号将初始化程序括起来。