Ich habe eine Klasse mit dem Namen HighWaterDetector:Wie übergeben Sie den Zeiger eines Klassenmembers in einer Elementinitialisierungsliste?
class HighWaterDetector
{
public:
HighWaterDetector(Device* device);
Device * devicePtr;
Output * output1Ptr;
CloudMsgParser * cloudMsgParserPtr;
Output output1;
NCD2Relay ncd2Relay;
CloudMsgParser cloudMsgParser;
};
mit Konstruktor:
HighWaterDetector::HighWaterDetector(Device* device): ncd2Relay(), output1(1, &ncd2Relay){
}
Ich versuche, eine Instanz von Output in der Initialisierungsliste für HighWaterDetector aber Output zu initialisieren, die Sie übergeben müssen Zeiger auf eine Instanz von NCD2Relay, die ebenfalls ein Mitglied der Klasse HighWaterDetector ist. Mein Programm stürzt im Ausgabekonstruktor ab. Ist das der falsche Weg, dies zu tun? Was mache ich falsch?
Ausgabeklasse:
class Output
{
public:
Output(ushort relayNum, NCD2Relay* ncd2RelayPtr);
ushort relayNum;
OutputStatus outputStatus;
int setOutputOn(void);
int setOutputOff(void);
void process(void);
NCD2Relay* ncd2RelayPtr;
};
//Output Constructor
Output::Output(ushort relayNum, NCD2Relay* ncd2RelayPtr) {
this->relayNum = relayNum;
this->ncd2RelayPtr = ncd2RelayPtr; //DOESNT CRASH IF I COMMENT THIS OUT
this->outputStatus.outFail = 0;
Serial.print("Initializing output ");
Serial.println(this->relayNum);
this->setOutputOff();
}
Können Sie diese Variable nicht initialisieren _in_ Konstruktor? – ForceBru
Was ist los? Falsches Design. Was versuchst du mit dieser zyklischen Abhängigkeit zu erreichen? Ist es wirklich notwendig, diese Abhängigkeiten zu haben? – KIIV
Ich denke nicht, dass dies ein Problem sein sollte, es sei denn, der 'Output'-Konstruktor dereferenziert 'ncd2RelayPtr'. – molbdnilo