В настоящее время я пытаюсь запрограммировать массив объектов в программе 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, но доступ к этому массиву представляет значительную часть моего кода).
По мере того, как вы пытаетесь sensNumber
на стек экземпляры instanceNumber из ros::Publisher
, должен быть вызван конструктор по умолчанию.
Альтернативой было бы выделение массива указателей на ros::Publisher
. Еще лучше, массив std::unique_ptr
или std::shared_ptr
.
Когда вы объявляете массив объектов c++, вы фактически создаете экземпляр каждого элемента. Это означает, что для каждого элемента массива вызывается конструктор без параметров. Если вы не хотите создавать экземпляры всех элементов при объявлении массива, вы должны объявить массив указателей вместо этого, а затем инициализировать каждый элемент, когда это необходимо.
ros::Publisher
имеет открытый конструктор по умолчанию, поэтому он должен работать. Вы можете пропустить что-то еще.