c++;不提供参数的强制数组声明 我目前正在尝试在C++程序中编程一组对象。但是,在尝试创建数组时,它不断给我错误。 因此,在我的代码之上,我有以下代码: #define sensNumber 4 ros::Publisher pub_range2 [sensNumber];

c++;不提供参数的强制数组声明 我目前正在尝试在C++程序中编程一组对象。但是,在尝试创建数组时,它不断给我错误。 因此,在我的代码之上,我有以下代码: #define sensNumber 4 ros::Publisher pub_range2 [sensNumber];,c++,arrays,ros,C++,Arrays,Ros,这会产生以下错误: multisone2.ino:19:38: error: no matching function for call to ‘ros::Publisher::Publisher()’ 所以它试图调用Publisher的构造函数,为什么?我该如何阻止它 现在我知道这也可以通过向量来实现,但我正在尝试优化代码,尤其是在读取速度方面,所以我宁愿避免向量(是的,我知道它仍然是linair,但访问此数组代表了我代码的重要部分) 当您试图对ros::Publisher的sensNumb

这会产生以下错误:

multisone2.ino:19:38: error: no matching function for call to ‘ros::Publisher::Publisher()’
所以它试图调用Publisher的构造函数,为什么?我该如何阻止它


现在我知道这也可以通过向量来实现,但我正在尝试优化代码,尤其是在读取速度方面,所以我宁愿避免向量(是的,我知道它仍然是linair,但访问此数组代表了我代码的重要部分)

当您试图对
ros::Publisher
sensNumber
实例进行堆栈分配时,必须调用默认构造函数


另一种方法是将指针数组分配给
ros::Publisher
。更好的是,一组
std::unique_ptr
std::shared_ptr

当您试图堆栈分配
ros::Publisher
sensNumber
实例时,必须调用默认构造函数


另一种方法是将指针数组分配给
ros::Publisher
。更好的是,一组
std::unique_ptr
std::shared_ptr

当您试图堆栈分配
ros::Publisher
sensNumber
实例时,必须调用默认构造函数


另一种方法是将指针数组分配给
ros::Publisher
。更好的是,一组
std::unique_ptr
std::shared_ptr

当您试图堆栈分配
ros::Publisher
sensNumber
实例时,必须调用默认构造函数



另一种方法是将指针数组分配给
ros::Publisher
。更好的是,一个数组:<代码> STD::UnQuyGPPT/<代码>或 STD::SyrdYPPTR >

当你声明C++对象的数组时,实际上是在实例化每个元素。这意味着为每个数组元素调用默认的无参数构造函数。如果不想在声明数组时实例化所有元素,则应该声明指针数组,然后在需要时初始化每个元素。

< P>当你声明C++对象的数组时,实际上是在实例化每个元素。这意味着为每个数组元素调用默认的无参数构造函数。如果不想在声明数组时实例化所有元素,则应该声明指针数组,然后在需要时初始化每个元素。

< P>当你声明C++对象的数组时,实际上是在实例化每个元素。这意味着为每个数组元素调用默认的无参数构造函数。如果不想在声明数组时实例化所有元素,则应该声明指针数组,然后在需要时初始化每个元素。

< P>当你声明C++对象的数组时,实际上是在实例化每个元素。这意味着为每个数组元素调用默认的无参数构造函数。如果在声明数组时不想实例化所有元素,那么应该声明一个指针数组,然后在需要时初始化每个元素。

是否也可以在所有实例上强制使用相同的参数,然后在以后将其更改为我希望的值?确实有很多方法(例如,placement new,但请忘了我在阅读后立即提到过这一点)但是,实际上您应该使用stl容器来实现这一点。我要求两者兼而有之,因为我真的希望使用它更“java风格”因为这是在arduino上运行的,而arduino不太能够处理我正在做的事情,所以我正在寻找一些情况,比如指针不需要是指针之类的东西。@Thijser您可以为自己的无参数构造函数提供任何您想要的默认初始化。这样看起来像ros::Publisher*pub=newros::Publisher[sizeof(pub_range)*sensNumber](“/超声波”、&range_msg);?这仍然给了我一个错误:数组new[-fppermissive]中带括号的初始值设定项有没有一个简单的解决方法?而且@atoMerz我不想在这一点上弄乱ross代码。是否也可以在所有实例上强制使用相同的参数,然后在以后将它们更改为我想要的样子?确实有很多方法(例如,放置新的位置,但请忘记我在阅读后立即提到的)但是,你真的应该使用stl容器来实现这一点。我要求两者兼而有之,因为我真的想使用它更“java风格”因为这是在arduino上运行的,而arduino不太能够处理我正在做的事情,所以我正在寻找一些情况,比如指针不需要是指针之类的东西。@Thijser您可以为自己的无参数构造函数提供任何您想要的默认初始化。这样看起来像ros::Publisher*pub=newros::Publisher[sizeof(pub_range)*sensNumber](“/超声波”、&range_msg);?这仍然给了我一个错误:数组new[-fppermissive]中带括号的初始值设定项有没有一个简单的解决方法?而且@atoMerz我不想在这一点上弄乱ross代码。是否也可以在所有实例上强制使用相同的参数,然后在以后将它们更改为我想要的样子?确实有很多方法(例如,放置新的位置,但请忘记我在阅读后立即提到的)但是,你真的应该使用stl容器来实现这一点。我要求两者兼而有之,因为我真的想使用它更“java风格”因为这是在arduino上运行的,而arduino不太能够处理我正在做的事情,所以我正在寻找像指针这样的情况,不需要指针之类的东西。@Thijser您可以为自己的无参数构造函数提供任何您想要的默认初始化。这样看起来