我目前正在尝试在c ++程序中编写一组对象。但是,它在尝试创建数组时一直给我错误。 所以在我的代码之上我有以下代码:
#define sensNumber 4
ros::Publisher pub_range2 [sensNumber];
这给出了错误:
multisone2.ino:19:38: error: no matching function for call to ‘ros::Publisher::Publisher()’
所以它试图为Publisher调用构造函数,为什么?我怎么阻止它?
现在我知道这也可以通过向量来完成,但我试图优化代码esp。为了阅读速度所以我宁愿避免向量(是的,我知道它仍然是linair但访问此数组代表我的代码的重要部分)。
答案 0 :(得分:2)
当您尝试堆叠分配sensNumber
ros::Publisher
个实例时,必须调用默认构造函数。
另一种方法是分配一个指向ros::Publisher
的指针数组。更好的是,std::unique_ptr
或std::shared_ptr
。
答案 1 :(得分:1)
当你声明一个c ++对象数组时,你实际上是在实例化每个元素。这意味着为每个数组元素调用默认的无参数构造函数。如果您不想在声明数组时实例化所有元素,则应该声明一个指针数组,然后在需要时初始化每个元素。