C++11 機能を実装しようとしました (この回答を参照として使用しましたCan I call a constructor from another constructor (do constructor chaining) in C++? )。明らかに、私は間違ったことをしましたが、その理由はわかりません。
次のコードでいくつかの警告が表示されます。
- メンバー
_output
はこのコンストラクターで初期化されませんでした - メンバー
_protocol_scanner
はこのコンストラクターで初期化されませんでした - メンバー
_state
はこのコンストラクターで初期化されませんでした - メンバー
_source
はこのコンストラクターで初期化されませんでした
これはコードです:
class UartScanner {
public:
UartScanner(periph::IStreamDevice *source, periph::IStreamDevice *output);
UartScanner(periph::IStreamDevice *source);
~UartScanner();
private:
typedef enum
{
WAITING_SYNC,
WAITING_UBLOX_MSG,
WAITING_NOVATEL_MSG
} states_t;
periph::IStreamDevice *_source;
periph::IStreamDevice *_output;
ProtocolScanner *_protocol_scanner;
states_t _state;
};
UartScanner::UartScanner(periph::IStreamDevice *source, IStreamDevice *output):
_source(source),
_output(output),
_state(WAITING_SYNC)
{
_protocol_scanner = new ProtocolScanner(source,output);
}
UartScanner::UartScanner(periph::IStreamDevice *source): UartScanner(source,0)
{
}
class IStreamDevice {
public:
virtual ~IStreamDevice() {}
virtual uint32_t read(uint8_t* data, uint32_t size) = 0;
virtual uint32_t write(const uint8_t* data, uint32_t size) = 0;
};