无法通过仅给出大小在 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_tint

你应该把它改成

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)};

};

即用大括号而不是括号将初始化程序括起来。