Невозможно создать параметризованный объект внутри другого класса
У меня проблемы с пониманием внутренней работы классов и т.п.
У меня есть класс Attributes
, содержащий параметры. В моем .ino я могу просто создать экземпляр объекта с Attributes greenBark(1, 2);
, и все будет в порядке.
Проблема. Теперь мне нужно создать объект Attributes в другом моем классе под названием Tree. Я понял, что если у моего конструктора нет параметров, я могу просто создать объект в другом классе. Однако мой конструктор класса атрибутов имеет параметры. Когда я пытаюсь создать параметризованный объект в другом классе, компилятор выдает ошибку. Как я могу создать объект атрибутов в моем древовидном классе? Извините, если я перепутал некоторые из этих терминов, я стараюсь не отставать!
Вот мои текущие файлы (сделанные для этого примера:)
Файл .ino
#include "attributes.h"
#include "tree.h"
Attributes greenBark(1, 2);
void setup()
{
Serial.begin(9600);
}
void loop()
{
greenBark.printAttributes();
}
attributes.cpp
#include "attributes.h"
Attributes::Attributes(int size, int texture)
{
_size = size;
_texture = texture;
}
void Attributes::printAttributes()
{
Serial.print("GreenBark Attributes: ");
Serial.print("Size = ");
Serial.print(_size);
Serial.print(" Texure = ");
Serial.print(_texture);
Serial.println();
}
attributes.h
#pragma once
#include <Arduino.h>
class Attributes
{
public:
Attributes(int size, int texture); // конструктор
void printAttributes(); // метод
private:
int _size = 0;
int _texture = 0;
};
tree.cpp
#include "attributes.h"
#include "tree.h"
Tree::Tree()
{
}
tree.h
#pragma once
#include <Arduino.h>
#include "attributes.h"
class Tree
{
public:
Tree(); // конструктор
void makeTree(); // метод
// Я хочу создать объект класса атрибутов в моем текущем классе, поэтому, естественно, я попытаюсь
// создайте объект так же, как я сделал это в своем скетче .ino, но строка ниже не работает.
//Атрибуты redBark(1, 2);
private:
};
Предоставлена следующая ошибка:
In file included from C:\Users\ajrob\Dropbox\Projects\Electronics\Arduino Sketchbook\ParameterizedConstructor\ParameterizedConstructor.ino:2:0:
C:\Users\ajrob\Dropbox\Projects\Electronics\Arduino Sketchbook\ParameterizedConstructor\tree.h:16:24: error: expected identifier before numeric constant
Attributes redBark(1, 2);
^
C:\Users\ajrob\Dropbox\Projects\Electronics\Arduino Sketchbook\ParameterizedConstructor\tree.h:16:24: error: expected ',' or '...' before numeric constant
In file included from C:\Users\ajrob\Dropbox\Projects\Electronics\Arduino Sketchbook\ParameterizedConstructor\tree.cpp:2:0:
C:\Users\ajrob\Dropbox\Projects\Electronics\Arduino Sketchbook\ParameterizedConstructor\tree.h:16:24: error: expected identifier before numeric constant
Attributes redBark(1, 2);
^
C:\Users\ajrob\Dropbox\Projects\Electronics\Arduino Sketchbook\ParameterizedConstructor\tree.h:16:24: error: expected ',' or '...' before numeric constant
exit status 1
Compilation error: expected identifier before numeric constant
@HavocRC, 👍1
Обсуждение1 ответ
Лучший ответ:
Я вижу здесь два варианта:
Вы можете последовать комментарию jsotola и инициализировать redBark
фигурными скобками:
Attributes redBark{1, 2};
По какой-то причине синтаксис со скобками не допускается, когда инициализация объекта в объявлении класса, но синтаксис с фигурные скобки в порядке.
Другой вариант — инициализировать redBark в конструкторе Tree
.
(а не в объявлении класса) с использованием списка инициализаторов:
// В объявлении класса:
Attributes redBark;
// Конструктор:
Tree::Tree() : redBark(1, 2) {}
Использование фигурных скобок сработало просто отлично! Спасибо!, @HavocRC
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
- Массив динамического размера в качестве члена класса
- Как перебрать объекты или передать объект функции?
- Прерывания внутри класса, связанные с функцией класса
- Присоедините функцию Arduino ISR к члену класса
- Недопустимое использование нестатической функции-члена
- Передача HardwareSerial и SoftwareSerial как свойства класса
https://en.cppreference.com/w/cpp/language/constructor, @Juraj
@Juraj Я перечитал эту страницу несколько раз, понимая, что могу, и не вижу, как это помогает в моей ситуации., @HavocRC
Я тоже мало что в этом понимаю, поэтому я попробовал
Attributes redBark {1, 2};
, и он не выдал ошибки... Я понятия не имею, делает ли он то, что вы ожидаете...Attributes redBark {1};
иАтрибуты redBark {1, 2, 3};
оба вызывают ошибку, так что это может быть то, что вам нужно, @jsotola@AJ_Smoothie ваш пост не относится к Arduino, а на самом деле является общим вопросом программирования ... он принадлежит https://stackoverflow.com/questions, @jsotola
@jsotola Я попробовал фигурные скобки в своем реальном коде (параметрами являются входные контакты и состояния контактов по умолчанию), и это сработало просто отлично. Спасибо, @HavocRC