【Arduino】「’xxx’ was not declared in this scope 」エラーが出る時の対処法(C言語/C++)

Arduino IDE

※この記事の所要時間は1分です。

原因

関数内で使用している変数や関数名(’xxx’)が使える形で定義されていない。

下記の例でいえば、gyro_xなどの変数が全て別のローカルスコープ内に存在しており、参照することが出来ない状態。

  M5.IMU.getGyroData(&gyro_x, &gyro_y, &gyro_z);   M5.IMU.getAccelData(&acc_x, &acc_y, &acc_z);   imu.Update(kSamplingFrequency, gyro_x, gyro_y, gyro_z, acc_x, acc_y, acc_z);   imu.GetAHRSData(&pitch, &roll, &yaw);   M5.IMU.getTempData(&temp);

スコープについては、こちらの記事で分かりやすく解説されている。詳しく知りたい人は是非。

解決法

簡単で、関数内で使用している変数名を定義してやればよい。
やり方は以下の二通り。

ローカル変数として定義する

loop関数内でしか使わない変数であれば、こちらのやり方がオススメ。

このように、適切な型を頭に付けて必要な変数などを全て定義する。

   float gyro_x, gyro_y, gyro_z, acc_x, acc_y, acc_z;   float pitch, roll, yaw;   float temp;

同じ変数をこの関数外でも使う場合は、引き続き同じエラーが出るので注意

その場合は次のグローバルスコープに定義する形を取ろう。

グローバル変数として定義する

こちらは、ぐぐーっと場所が変わり、全ての関数の外で定義する。
今回は、わざと分かりやすくプログラムの先頭に書いた。

此方で問題なく動くようになるが、「じゃあ全ての変数をグローバルスコープにしたらいいじゃん」としてしまうと、数千~数万行のソースコードを書く時にとんでもないことになるので注意。

まとめ

必要な定義は必要な範囲の中でだけ、という思想設計で挑むことで、同じ挙動でもプログラムの可読性は桁違いに変わる。

数百行程度の小規模なソースコードを一人で書く分には多少雑に宣言しても問題ないが、最初のうちから「この変数はどこで定義すれば綺麗か」とスコープを意識して書くだけでかなり見栄えが変わるという点だけは留意しておこう。

まる。

Python歴5年のフルスタックエンジニア&ヨギー。
大学は心理学専攻、趣味はヘルスケア全般。

最近は自作脳波デバイスとそれを使ったインタラクティブアートのチューニングに勤しみ中。コラボ・お仕事のご依頼はDM又はメールにて。

↓アートとかの趣味アカ。よかったらみてね。٩(๑❛ᴗ❛๑)
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
【4人に1人が盗み見被害!?】意外と知られていない、公共フリーWiFiの危険性と対策について解説
開発終了した筋電によるジェスチャー操作デバイスMyo armbandをどこまで使えるか検証してみる(2023年)
リクルートの個人事業主用Airカードを解約(退会)する方法
【最大193万の給付金付き】30代女性未経験からのWeb転職はインターネットアカデミーのMamaeduが最強である理由を解説!気になる評判も
意外と簡単!総務省の「技適未取得機器を用いた実験等の特例制度」の廃止届の提出方法

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