【解決方法】chatgpt で生成されたスケッチでコンパイル エラーが発生するのはなぜですか?


私はChatGPTに、Arduino UNOのボタンにattachInterruptを使用するコードを書くように依頼しました。 以下は、新しいスケッチに正確にコピーしてコンパイルしようとしたコードです。

C++
class Button {
private:
  int buttonPin;
  volatile bool buttonState;
  
public:
  Button(int pin) : buttonPin(pin), buttonState(false) {}

  void setup() {
    pinMode(buttonPin, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(buttonPin), buttonChanged, CHANGE);
  }

  bool getState() {
    return buttonState;
  }

private:
  static void buttonChanged() {
    // You can only access static member variables and functions inside a static member function.
    // In this case, we can access the buttonState variable.
    buttonState = digitalRead(buttonPin);
  }
};

Button myButton(2);

void setup() {
  Serial.begin(9600);
  myButton.setup();
}

void loop() {
  bool state = myButton.getState();
  Serial.println(state);
  delay(100);
}

コンパイル時に発生するエラーは次のとおりです。

D:\Arduino\Sketches\Test_Button\Test_Button.ino: In static member function 'static void Button::buttonChanged()':
D:\Arduino\Sketches\Test_Button\Test_Button.ino:22:5: error: invalid use of member 'Button::buttonState' in static member function
     buttonState = digitalRead(buttonPin);
     ^~~~~~~~~~~
D:\Arduino\Sketches\Test_Button\Test_Button.ino:4:17: note: declared here
   volatile bool buttonState;
                 ^~~~~~~~~~~
D:\Arduino\Sketches\Test_Button\Test_Button.ino:22:31: error: invalid use of member 'Button::buttonPin' in static member function
     buttonState = digitalRead(buttonPin);
                               ^~~~~~~~~
D:\Arduino\Sketches\Test_Button\Test_Button.ino:3:7: note: declared here
   int buttonPin;
       ^~~~~~~~~

exit status 1

Compilation error: invalid use of member 'Button::buttonState' in static member function

私が試したこと:

私は C++ やクラスのコーディングに詳しくないので、コンパイラのメッセージを理解しようとしました。 何かを修正するような変更をコードに加えることができませんでした。

解決策 1

ChatGPT はソフトウェア開発者ではないため、インターネットからデータを読み取り、他のデータの塊と組み合わせて吐き出す「学習システム」です。

結果として、GIGO: Garbage In, Garbage Out が得られます。 あなたが要求したものに近いと思われるコードを見つけた場合 (ただし、そうでないこともよくあります)、運命の共犯者としてそれをあなたに渡します。

ChatGPT はコードを書かず、コードを理解せず、C++ やその他のソフトウェア言語を知りません。 その「コード サンプル」がコンパイルできないことは非常によくあります。これは、コード サンプルがコンパイルされないことも多く、連携して動作するように書かれていないいくつかの類似したコードから組み立てられているためです。

コメント

タイトルとURLをコピーしました