В вашем классе хранится массив sensor
, но GetSensors
пытается вернуть копию одного sensor
. Нет преобразования из массива в один sensor
, поэтому ваш компилятор не знает, что ему нужно делать.
Вопрос здесь в том, что вы хотите сделать: хотите получить весь список или хотите получить один датчик.
Если вы хотите вернуть весь массив.
C ++ не поддерживает массивы в качестве возвращаемых типов. Вам нужно будет вернуть указатель на первый элемент в вашем массиве.
Код будет выглядеть так:
sensor* getSensors() {
return sensors;
}
, и вы будете использовать его следующим образом при условии, что g
является экземпляром global:
sensor* sensors = g.getSensors();
Serial.print(sensors[3].value);
Этот код использует так называемый массив для затухания указателя . Вызывающие функции вашей функции getSensors больше не будут знать, какой размер массива, вы должны убедиться, что go не выходит за границы! Так как при этом возвращается указатель на исходные датчики, любые изменения, которые вы вносите позже в возвращаемый указатель, будут влиять на массив в случае глобального.
Если вы хотите вернуть указанный c датчик
Вам просто нужно изменить функцию getSensors, чтобы в качестве аргумента принимать индекс нужного вам датчика. Это будет выглядеть так:
sensor& getSensor(int index) {
return sensors[index];
}
Возвращает ссылку на указанный c датчик. Как и в случае с указателем, изменения в возвращаемом датчике будут влиять на исходный массив внутри экземпляра global
(который, как я предполагаю, является намерением)
Если вы не хотите вносить изменения в исходный массив, вы должны вернуть значение и пропустить &
в типе возвращаемого значения.