質問するログイン新規登録
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

123閲覧

C++ ArduinoJSONを利用した際のビルド時エラー

HIASOBI

総合スコア1

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

1グッド

0クリップ

投稿2025/10/24 02:14

1

0

実現したいこと

エラーが発生しないようにしたい

発生している問題・分からないこと

講義の課題にて、C++にてVScodeの拡張機能「PlatformIO」を用いて、ライブラリ「M5StickCPlus」「ArduinoJSON」を利用したカメラでの画像認識のプログラムをビルドしようとしたのですが、33行目と44行目のNULLの部分でエラーが出てビルドを行えません。
StaticJsonDocumentがエラーに関係していると思われます。

エラーメッセージ

error

1src/main.cpp:33:25: error: 'ArduinoJson::V742PB22::detail::ElementProxy< <template-parameter-1-1> >::ElementProxy(const ArduinoJson::V742PB22::detail::ElementProxy< <template-parameter-1-1> >&) [with TUpstream = ArduinoJson::V742PB22::detail::MemberProxy<ArduinoJson::V742PB22::JsonDocument&, ArduinoJson::V742PB22::detail::RamString>]' is private within this context 2 3src/main.cpp:44:25: error: 'ArduinoJson::V742PB22::detail::ElementProxy< <template-parameter-1-1> >::ElementProxy(const ArduinoJson::V742PB22::detail::ElementProxy< <template-parameter-1-1> >&) [with TUpstream = ArduinoJson::V742PB22::detail::MemberProxy<ArduinoJson::V742PB22::JsonDocument&, ArduinoJson::V742PB22::detail::RamString>]' is private within this context

該当のソースコード

#include <Arduino.h> #include <M5StickCPlus.h> #include <ArduinoJson.h> StaticJsonDocument<2048> doc; uint8_t buffer[2048]; int disp_width; int disp_height; int cam_width=240; int cam_height=320; void setup() { // put your setup code here, to run once: M5.begin(); M5.Lcd.begin(); disp_width = M5.Lcd.width(); disp_height = M5.Lcd.height(); Serial.begin(115200); Serial1.begin(115200, SERIAL_8N1, 32, 33);// Grove } void loop() { // put your main code here, to run repeatedly: if(Serial1.available()>0){//シリアルにデータがあるか確認 DeserializationError err = deserializeJson(doc, Serial1); if(err) { //Serial.print(err.c_str()); while(Serial1.available()>0){ Serial1.read(); return; } } M5.Lcd.fillScreen(BLACK); if(doc["blobs"][0]!=NULL){//0番目の対象が検出されている int tx = doc["blobs"][0]["x"];//対象の左上座標 int ty = doc["blobs"][0]["y"];//対象の左上座標 int tw = doc["blobs"][0]["w"];//対象の幅 int th = doc["blobs"][0]["h"];//対象の高さ M5.Lcd.fillRect(tx * disp_width / cam_width, //対象のx座標を表示用に変換 ty * disp_height / cam_height,//対象のy座標を表示用に変換 tw * disp_width / cam_width, //対象の幅を表示用に変換 th * disp_height / cam_height,//対象の高さを表示用に変換 ORANGE); } if(doc["blobs"][1]!=NULL){//0番目の対象が検出されている int tx = doc["blobs"][1]["x"];//対象の左上座標 int ty = doc["blobs"][1]["y"];//対象の左上座標 int tw = doc["blobs"][1]["w"];//対象の幅 int th = doc["blobs"][1]["h"];//対象の高さ M5.Lcd.fillRect(tx * disp_width / cam_width, //対象のx座標を表示用に変換 ty * disp_height / cam_height,//対象のy座標を表示用に変換 tw * disp_width / cam_width, //対象の幅を表示用に変換 th * disp_height / cam_height,//対象の高さを表示用に変換 BLUE); } } }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

エラーの内容からGoogleにて検索をしても同様のエラーに関するページを見つけることができませんでした。
また、該当講義の先生にも相談したのですが解決しませんでした。

補足

特になし

melian👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2025/10/24 02:26

ArduinoJson 7.3 よりも前のバージョンにおいてダングリングポインタが発生する可能性があったそうで、その問題への対応を行ったために質問にある様なコンパイルエラーが発生する様になったそうです。ユーザプログラムでの変更点は以下のページで解説されていますので、参考にしてみてください。 error: ElementProxy or MemberProxy is private within this context | ArduinoJson 7 https://arduinojson.org/v7/proxy-non-copyable/
HIASOBI

2025/10/24 02:45

コメントありがとうございます。こちらのコメントで紹介していただいたページを参考に書き換えたところ問題が解決しました! ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
guest

回答1

0

ベストアンサー

※ コメントから転記

ArduinoJson 7.3 よりも前のバージョンにおいてダングリングポインタが発生する可能性があったそうで、その問題への対応を行ったために質問にある様なコンパイルエラーが発生する様になったそうです。ユーザプログラムでの変更点は以下のページで解説されていますので参考にしてみてください。

 error: ElementProxy or MemberProxy is private within this context | ArduinoJson 7

投稿2025/10/24 02:50

melian

総合スコア21527

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問