

以下のコードでエラーが出てしまいます。

エラー内容  
main.cpp:5:44:error: use of deleted function 'SerialPrint::SerialPrint()'  
SerialPrint _serialPrint = SerialPrint();

main.cpp

[code]

    #include "main.h"
    // SerialPrint _serialPrint;
    
    void setup(){
        SerialPrint _serialPrint = SerialPrint();
        _serialPrint.beginPrint(DEBUG_PORT_RX, DEBUG_PORT_TX, DEBUG_PORT_BAUDRATE);
    }
    
    void loop(){
    
    }
    
[/code]

main.h

[code]

    #pragma once
    #include "Arduino.h"
    #include "SerialPrint.h"
    
    #define DEBUG_PORT_RX 11
    #define DEBUG_PORT_TX 12
    #define DEBUG_PORT_BAUDRATE 4800
    
    void setup();
    void loop();
    
[/code]

SerialPrint.cpp

[code]

    #include "SerialPrint.h"
    #include <string.h>
    
    /**
     * コンソール表示用シリアルポート初期化
     * */
    
    void SerialPrint::beginPrint(uint8_t rx, uint8_t tx, long baudrate) {
        _serial = SoftwareSerial(rx,tx);
        _serial.begin(baudrate);
    }
    
    void SerialPrint::print(const char *message) {
        _serial.print(message);
    }
    
    void SerialPrint::print(String message) {
        _serial.print(message);
    }
    
    void SerialPrint::println(const char *message) {
        _serial.println(message);
    }
    
    void SerialPrint::println(String message) {
        _serial.println(message);
    }
    
[/code]

SeriapPrint.h

[code]

    #pragma once
    #include <SoftwareSerial.h>
    
    
    class SerialPrint {
    public:
        void beginPrint(uint8_t rx, uint8_t tx, long baudrate);
        // static void cmpStr(const char *str1, const char *str2, char *buf);
        void print(const char * message);
        void println(const char * message);
        void print(String message);
        void println(String message);
    private:
        SoftwareSerial _serial;
    };
    
    
[/code]


CC BY-SA 4.0
2019-11-03T15:24:32.413
60225
2019-11-03T16:41:38.337
18802
question
c++ arduino
C++でオブジェクトを初期化するとエラーが出る


main.cppの`setup()`関数の中の

[code]

    SerialPrint _serialPrint = SerialPrint();
    
[/code]

で、`SerialPrint`クラスのインスタンスを生成しています。このとき、`SerialPrint`クラスのすべてのメンバー変数も初期化されます。この場合は`SoftwareSerial
_serial;`も一緒に初期化されます。`SerialPrint()`のデフォルトコンストラクタは作っていないので、メンバーもすべてデフォルトコンストラクタで初期化されます。

[Arduinoのマニュアル](https://www.arduino.cc/en/Reference/SoftwareSerialConstructor)を見ると`SoftwareSerial`クラスにはデフォルトコンストラクタがないようです。このため、`SoftwareSerial
_serial;`が初期化できず、エラーになっています。

実際`SerialPrint::beginPrint()`メソッドの中では、`SoftwareSerial`のコンストラクタに引数を渡しているので、これを`SoftwareSerial`のコンストラクタで行えばいいと思います。


CC BY-SA 4.0
2019-11-03T16:41:38.337
60230
2019-11-03T16:41:38.337
3605
60225
answer