【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又はメールにて。

まる。をフォローする
その他の記事はこちら
世界初!?はんだ用卓上リフロー炉で「リフローたこ焼き」は調理できるのか
【エンジニアのキャリアを伸ばす】tech boostの持つ、2つのコースとは?特徴やメリットを解説!【未経験からフリーランスになろう】
【ネタバレ】2024年しろたん新春福袋を購入したので中身を紹介します!【限定品は?総額いくら?】
[Touchdesigner]CHOPの波形グラフをオーバーレイ(重ねて表示)する方法
Yt-dlpにてHTTP Error 403: Forbiddenエラーが出る時の対処法【2023年】

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