Nach meinem Stand ersetzt der Präprozessor in diesem Beispiel beim Compilieren überall. TEMPERATURE_PRECISION durch 10.
#defines haben keinen Scope/Gültigkeitsbereich wie Variablen! Die Ersetzung findet vor dem Compilieren statt. Daher der Name Präprozessor.
Wie geht das richtig?
Am einfachsten ist es man hat intern nur einen Zeiger auf das globale Array. Überlege dir ob du wirklich in dem Objekt nochmal eine Kopie brauchst! Wenn ja musst du per Hand eine Kopie erstellen. Auf dem Arduino geht das nicht direkt, weil da Hilfsmittel wie std::array und std::initializer_list fehlen
#include <DallasTemperature.h>
DeviceAddress adr[2] = {
{ 0x28, 0x5F, 0x6A, 0xD7, 0x04, 0x00, 0x00, 0x16 },
{ 0x28, 0xC8, 0x68, 0xD2, 0x03, 0x00, 0x00, 0x6C },
};
class Test
{
public:
Test(DeviceAddress* adr) : adr(adr)
{
for (byte i = 0; i < 2; i++)
{
for (byte b : adr[i])
{
Serial.print(b, HEX);
Serial.print(',');
}
Serial.println();
}
}
private:
DeviceAddress* adr;
};
void setup()
{
Serial.begin(9600);
Test test(adr);
}
void loop()
{
}
Schau dir bitte Initialisierungslisten genauer an. Mit anschauen meine ich gebe den Begriff in Google ein. Da gibt es unendlich Beispiele.
Auch deshalb:
_GeraeteID = GeraeteID;
_TA = TA;
Das geht, aber es ist nicht sauber. Variablen werden beim Erstellen des Objekts Default-initialisiert und dann im Konstruktor nochmal zugewiesen. Das kann man sich sparen.
Auch brauchst du dann nicht zwei verschiedene Namen. Der Parameter und die Variable können den gleichen Namen haben. Der Compiler kann sie unterscheiden. Wobei das auch der Grund für das this-> war. Durch den this-Zeiger greift man auf die Variable des Objekts zu, während man ohne das wie üblich die auf die lokale Version zugreift. Das sollte man wissen, aber es ist eben auch etwas was man sich durch die konsequente Verwendung von Initialisierungslisten sparen kann
TempA = new float [_AnzTempSensoren] ;
lTempA = new float [_AnzTempSensoren] ;
Wenn du new verwendest dann muss deine Klasse auch einen Destruktor haben der den Speicher wieder freigibt! Siehe delete, bzw. delete[] für Arrays
Es gibt auch Tutorials die das alles breit durchkauen. z.B.:
http://www.cpp-tutor.de/cpp/le10/ctor_dtor.html