У меня есть класс с именем HighWaterDetector:Как передать указатель члена класса в список инициализации члена?
class HighWaterDetector
{
public:
HighWaterDetector(Device* device);
Device * devicePtr;
Output * output1Ptr;
CloudMsgParser * cloudMsgParserPtr;
Output output1;
NCD2Relay ncd2Relay;
CloudMsgParser cloudMsgParser;
};
с конструктором:
HighWaterDetector::HighWaterDetector(Device* device): ncd2Relay(), output1(1, &ncd2Relay){
}
Я пытаюсь инициализировать экземпляр вывода в списке инициализации членов для HighWaterDetector, но выход, который требует от вас пропускать указатель на экземпляр NCD2Relay, который также является членом класса HighWaterDetector. Моя программа вылетает из конструктора вывода. Это неправильный способ сделать это? Что я делаю не так?
Выходной класс:
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();
}
Не можете ли вы инициализировать эту переменную _in_ конструктора? – ForceBru
Что случилось? Неправильный дизайн. Что вы пытаетесь архивировать с этой циклической зависимостью. Действительно ли необходимо иметь эти зависимости? – KIIV
Я не думаю, что это должно быть проблемой, если только конструкторы конструктора 'Output'' ncd2RelayPtr'. – molbdnilo