【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;

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

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

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

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

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

まとめ

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

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

まる。

━━━━━━━━━━━━━━━━━
■未経験OK!大学生インターン募集中!
プログラミングやITなど
興味ある方ご連絡ください‎。
(๑ > ﻌ <`)و✧
━━━━━━━━━━━━━━━━━
Python歴5年のフルスタックエンジニア&ヨギー。
大学は心理学専攻、趣味はヘルスケア全般。
最近は自作脳波デバイスの設計とそれを使ったインタラクティブアート生成に勤しみ中。

↓アートとか日常。
Instagram:@malmal0v0

お仕事のご依頼はDM又はメールにて。

まる。をフォローする
その他の記事はこちら
[Touchdesigner]1秒に1増加する変数をPythonで書く方法
【Touchdesigner】e-06って?値に英字が入る理由を解説
教育訓練給付金で45万円付与!4ヶ月で未経験からエンジニアを目指せるディープロ(DPro)を解説
【4人に1人が盗み見被害!?】意外と知られていない、公共フリーWiFiの危険性と対策について解説
開発終了した筋電によるジェスチャー操作デバイスMyo armbandをどこまで使えるか検証してみる(2023年)

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