はじめに
ROS2のC++ノードでint配列(std::vector<int>
)パラメータを使おうとしたら、コンパイルエラーとなったので、その対処方法を記載する。
環境
- ROS2 Foxy
方法
リンク先にあるように、std::vector<int>
では、エラーとなるので、std::vector<int64_t>
に変更する。
int(uint)型配列の対応状況は以下のようになっている。
-
NG
// int node->declare_parameter<vector<int>>("param", std::vector<int>{}); node->declare_parameter<vector<int16_t>>("param", std::vector<int16_t>{}); node->declare_parameter<vector<int32_t>>("param", std::vector<int32_t>{}); // unsigned int node->declare_parameter<vector<uint16_t>>("param", std::vector<uint16_t>{}); node->declare_parameter<vector<uint32_t>>("param", std::vector<uint32_t>{});
-
OK
// int node->declare_parameter<vector<int64_t>>("param", std::vector<int64_t>{}); // unsigned int node->declare_parameter<vector<uint8_t>>("param", std::vector<uint8_t>{});
補足情報
配列型パラメータでコンパイル可能な型は以下の通り。
node->declare_parameter<std::vector<double>>("param", std::vector<double>{});
node->declare_parameter<std::vector<uint8_t>>("param", std::vector<uint8_t>{});
node->declare_parameter<std::vector<bool>>("param", std::vector<bool>{});
node->declare_parameter<std::vector<int64_t>>("param", std::vector<int64_t>{});
node->declare_parameter<std::vector<double>>("param", std::vector<double>{});
node->declare_parameter<std::vector<std::string>>("param", std::vector<std::string>{});
参考