[ad_1]
私は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++ やその他のソフトウェア言語を知りません。 その「コード サンプル」がコンパイルできないことは非常によくあります。これは、コード サンプルがコンパイルされないことも多く、連携して動作するように書かれていないいくつかの類似したコードから組み立てられているためです。
[ad_2]
コメント