質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

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

Arduino

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

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

Q&A

解決済

3回答

3204閲覧

ArduinoIDEでのコンパイルエラー expected ')' before '&' token

sgtm0113

総合スコア5

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

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

Arduino

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

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

0グッド

1クリップ

投稿2020/01/24 20:01

編集2020/01/24 20:04

前提・実現したいこと

初めての質問なので読みにくい箇所も多々あるかと思いますが、お許しください。
LILYGOというメーカーのT-Wristbandというスマートバンドが「プログラムできるスマートバンド」という題名でウェブサイト上で記事にされており、気になって購入しました。ESP32というマイコンを搭載しており、Arduino IDEを用いて開発を行う物です。includeしたファイルが見当たらない系のエラーgほとんどなので、その入手先をGoogle検索しつつ適宜Githubからクローンを行ったりブラウザでダウンロードしたりして、とりあえずサンプルみたいなスケッチをビルドしようとしています。しかし、以下のようなエラーが直せず困っています。自分はC++は少ししかできないのでこの様な文法はなんとなくしかわからないのですが、なぜここに')'がexpectedなのでしょうか?また、どうすればコンパイルが可能でしょうか?ライブラリのファイルなので、自分は一切触っていません。
該当するファイルはESP8266用のようですが、ESP32用のヘッダーファイルから参照されているため、ESP32でも動くものだと思います。

発生している問題・エラーメッセージ

エラーメッセージ(関係ない警告なども含まれるため一部抜粋)

In file included from /home/sugi/arduino/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h:30:0, from /home/sugi/arduino/libraries/ESP8266WebServer/src/ESP8266WebServer.h:235, from /home/sugi/arduino/libraries/WiFiManager/WiFiManager.h:17, from /home/sugi/Wrist/git/LilyGO-T-Wristband/LilyGO-T-Wristband.ino:14: /home/sugi/arduino/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:70:28: error: expected ')' before '&' token StaticRequestHandler(FS& fs, const char* path, const char* uri, const char* cache_header) ^

該当のソースコード(該当部分のみ抜粋)

C++

1template<typename ServerType> 2class StaticRequestHandler : public RequestHandler<ServerType> { 3 using WebServerType = ESP8266WebServerTemplate<ServerType>; 4public: 5 StaticRequestHandler(FS& fs, const char* path, const char* uri, const char* cache_header) 6 : _fs(fs) 7 , _uri(uri) 8 , _path(path) 9 , _cache_header(cache_header) 10 { 11 if (fs.exists(path)) { 12 File file = fs.open(path, "r"); 13 _isFile = file && file.isFile(); 14 file.close(); 15 } 16 else { 17 _isFile = false; 18 } 19 20 DEBUGV("StaticRequestHandler: path=%s uri=%s isFile=%d, cache_header=%s\r\n", path, uri, _isFile, cache_header); 21 _baseUriLength = _uri.length(); 22 } 23 //以下クラスの定義省略 24}

試したこと

ファイル名を含めてエラーメッセージでGoogle検索をしてみたのですが、FS_NO_GLOBALSをdefineすると〜みたいなissueばっかり出てきて、関係なさそうだな…と思って諦めてしまった状態です…苦手な英語だということもあり読めていないのですが…

補足情報(FW/ツールのバージョンなど)

PCのOSはDebian 10
Arduino IDEのバージョンは1.8.10
該当するファイルは ここ からクローンしたもので、該当するファイルは ここ にあります。

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

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

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

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

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

cateye

2020/01/24 23:48

各.hファイルから参照されているFS.hは、有りますか?
guest

回答3

0

StaticRequestHandler中のFSをfs::FSに変更するか、RequestHandlersImpl.hの呼び出しの前でusing namespace fs;を行うことでエラーが解消しませんか。

このソースで試したわけではありませんが、簡単なソースでクラスの名前空間指定を外した場合に、
error: expected ')' before '&' token
のエラーは発生していました。

クラスFSを探すとFS.h(たぶんArduino/cores/esp8266/FS.h?)で定義されていました。
この中ではfsという名前空間内で定義されているため、本来はfs::FSで使う必要があります。

このGithubのソースを見ると、ヘッダーファイル内でusing namespace(usingディレクティブ)を使っているものがいくつかありました。そのため呼び出しの順番によりFS単体の記述でOKな場合があったのかもしれません。

なお、ヘッダーファイル内のusingディレクティブの使用はあまり褒められたものではないと思います。
違う名前空間に同じ名前のクラス・関数などがあった場合、それを特定して使用するのが困難になる場合があります。

投稿2020/01/26 00:27

ta.fu

総合スコア1667

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

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

0

ベストアンサー

なぜエラーになっているかは追求していませんが、githubのリポジトリの情報に沿って

  • LilyGO-T-Wristbandをまるまるzipでダウンロードして解凍し
  • *.inoファイルの含まれる直上のLilyGO-T-Wristband-masterフォルダをLilyGO-T-Wristbandにリネームし(.inoファイルとフォルダ名が一致しなければいけないため)
  • LilyGO-T-Wristband/libdepsにある2つのフォルダ(PCF8563_LibraryとWiFiManager)を/Users/User/Documents/Arduino/libraries以下にコピー
  • githubにあるリンクからTFT_eSPIライブラリをzipでダウンロードし
  • Arduino IDEを開いて、メニュー[スケッチ]-[ライブラリをインクルード >]-[.ZIP形式のライブラリをインストール...]でダウンロードしたTFT_eSPIライブラリのzipファイルを指定、インストール
  • /Users/User/Documents/Arduino/libraries/TFT_eSPI-master/User_Setup_Select.h を編集し
  • IDEメニュー[ファイル]-[開く...]で先のLilyGO-T-Wristedband/LilyGO-T-Wristedband.inoを開く
  • [ツール]-[ボード: >]で[ESP32 Dev Module]を選択
  • コンパイル

でエラーが出ずにコンパイル終了しました。なお、実機がないので動作確認は出来ません。

エラーは、ちゃんとドキュメントを読んで手順通りにやれば出来るところを我流でやった結果ではないかと想像します。


includeしたファイルが見当たらない系のエラーgほとんどなので、その入手先をGoogle検索しつつ適宜Githubからクローンを行ったりブラウザでダウンロードしたりして、とりあえずサンプルみたいなスケッチをビルドしようとしています。

これだけの長さの文章に、実は具体的な(回答者が追試・確認できる)情報がひとつも含まれていません...次回質問する際には、是非「読んだ人が再現実験を出来る」ような情報を盛り込んでいただければと思います。自分の作業の確認にもなって、整理することで、質問するまでもなく自力で解決してしまうこともあるでしょう。

投稿2020/01/25 03:41

thkana

総合スコア7639

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

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

sgtm0113

2020/01/30 11:52

回答ありがとうございます。ご指摘の通りに操作を行っても #include "config.h"で見つからずエラー、仕方なくそれっぽいものをgithubから見つけてきて補填してもエラー…一向に解決しないので作業環境をLinuxからWindowsに変更してみたところ、解決しました。ありがとうございました。
guest

0

StaticRequestHandler(FS& fs, const char* path, const char* uri, const char* cache_header)

は、

StaticRequestHandler(FS &fs, const char* path, const char* uri, const char* cache_header)

のタイプミスだと思われます。

FS &fs
なら、変数fsで参照しているものの型がFSであるというように解釈できますが、
FS& fs
というように型が&で終わっているのは文法的におかしいです。

投稿2020/01/25 01:33

coco_bauer

総合スコア6915

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

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

thkana

2020/01/25 02:11

C++の文法をちゃんと読んでないのでわかりませんが、宣言における&の立場を考えると、Cでint*_a;もint_*a;どちらもOK(int_*_a;もOK)というのと同様な扱いを期待できないですか。 とりあえず、Arduino IDEでESP32ターゲットにして void setup() { } void func(int &a){ a=0; } void func2(int& a){ a=1; } void func3(int & a){ a=2; } void loop() { int a=0; func(a); func2(a); func3(a); } はエラーになりません。
SaitoAtsushi

2020/01/25 02:37

トークンの分割に必要な場合を除いて空白は無視されます。 https://timsong-cpp.github.io/cppwp/n3337/lex.token FS& fs と書いてあっても FS &fs と書いてあっても FS と & と fs とのみっつのトークンに分割した上で文法的解釈が入るので、この場合には空白によって意味が変わることはありません。 thkana さんの解釈で正しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問