c ++ принудительное объявление массива без указания параметров

0

В настоящее время я пытаюсь запрограммировать массив объектов в программе c++. Однако он продолжает давать мне ошибки при попытке создания массивов. Таким образом, поверх моего кода у меня есть следующий код:

#define sensNumber 4
ros::Publisher pub_range2 [sensNumber];

это дает ошибку:

multisone2.ino:19:38: error: no matching function for call to ‘ros::Publisher::Publisher()

Поэтому он пытается вызвать конструктор для издателя, почему? И как это остановить?

Теперь я знаю, что это также можно сделать с помощью векторов, но я пытаюсь оптимизировать код esp. для скорости чтения, поэтому я предпочел бы избегать векторов (да, я знаю, что он остается linair, но доступ к этому массиву представляет значительную часть моего кода).

  • 0
    Это странно - согласно документации , ros::Publisher имеет открытый конструктор по умолчанию, поэтому он должен работать. Вы можете пропустить что-то еще.
Теги:
arrays
ros

2 ответа

2

По мере того, как вы пытаетесь sensNumber на стек экземпляры instanceNumber из ros::Publisher, должен быть вызван конструктор по умолчанию.

Альтернативой было бы выделение массива указателей на ros::Publisher. Еще лучше, массив std::unique_ptr или std::shared_ptr.

  • 0
    Можно ли также принудительно задать один и тот же параметр во всех экземплярах, а затем изменить их на то, что я хочу, чтобы они были?
  • 0
    Есть действительно способы (например, размещение новых, но, пожалуйста, забудьте, что я упомянул об этом сразу после прочтения), но на самом деле вы должны использовать контейнер stl для этого.
Показать ещё 4 комментария
1

Когда вы объявляете массив объектов c++, вы фактически создаете экземпляр каждого элемента. Это означает, что для каждого элемента массива вызывается конструктор без параметров. Если вы не хотите создавать экземпляры всех элементов при объявлении массива, вы должны объявить массив указателей вместо этого, а затем инициализировать каждый элемент, когда это необходимо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню