スタック・オーバーフロー Asked by matsujirushi on December 26, 2020
SpresenseのArduino Platformで、std::string
クラスを使おうと思い、#include <string>
したところコンパイルエラーが発生しました。
C++標準ライブラリですが、利用不可でしょうか?
Code:
#include <string>
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
Error message:
In file included from c:userstakashidocumentsarduinodatapackagesspresensetoolsgcc-arm-none-eabi5.4.1windowsarm-none-eabiincludec++5.4.1bitsstl_algobase.h:61:0,
from c:userstakashidocumentsarduinodatapackagesspresensetoolsgcc-arm-none-eabi5.4.1windowsarm-none-eabiincludec++5.4.1bitschar_traits.h:39,
from c:userstakashidocumentsarduinodatapackagesspresensetoolsgcc-arm-none-eabi5.4.1windowsarm-none-eabiincludec++5.4.1string:40,
from C:UserstakashiAppDataLocalTemparduino_modified_sketch_278803sketch_jul17a.ino:1:
c:userstakashidocumentsarduinodatapackagesspresensetoolsgcc-arm-none-eabi5.4.1windowsarm-none-eabiincludec++5.4.1bitscpp_type_traits.h:168:12: error: redefinition of 'struct std::__is_integer<unsigned char>'
struct __is_integer<unsigned char>
^
c:userstakashidocumentsarduinodatapackagesspresensetoolsgcc-arm-none-eabi5.4.1windowsarm-none-eabiincludec++5.4.1bitscpp_type_traits.h:147:12: error: previous definition of 'struct std::__is_integer<unsigned char>'
struct __is_integer<bool>
^
(Sony developer forumにもポストしています)
Arduinoはソースの拡張子がinoですが、cppも使えると思います。
拡張子cppの別ファイルに#include を書き、それをinoからコールできないでしょうか?
Answered by 池田茂樹 on December 26, 2020
根本解決にはならなさそうですが、Fumu 7さんのご回答を参考に
cpp_type_traits.hの中の、__is_integerを削除してみたところ、
正常にstringがinclude出来ました。
__is_integerを使う用事が無いのでしたら、お試しされるのはいかがでしょうか。
ライブラリ作成されているとなると、他の方は使う事が出来なくなってしまいますが・・・
Answered by SQNK on December 26, 2020
エラーメッセージを読んでみました。
c:userstakashidocumentsarduinodatapackagesspresensetoolsgcc-arm-none-eabi5.4.1windowsarm-none-eabiincludec++5.4.1bitscpp_type_traits.h:168:12: error: redefinition of 'struct std::__is_integer'
struct __is_integer
[直訳]エラー:'struct std::__is_integer'が再定義されてます。
struct __is_integer<unsigned char>
c:userstakashidocumentsarduinodatapackagesspresensetoolsgcc-arm-none-eabi5.4.1windowsarm-none-eabiincludec++5.4.1bitscpp_type_traits.h:147:12: error: previous definition of 'struct std::__is_integer'
struct __is_integer
[直訳]エラー:'struct std::__is_integer'の以前の定義は
struct __is_integer<bool>
==
"struct __is_integer < unsigned char>" と "struct __is_integer< bool>" の定義が被っているから駄目だと言っている訳ですが、 素直に読むと"unsigned char" と "bool" は別の型ですから被らないですよね。
それが被るということは、"unsigned char" と "bool"は、同じだという宣言がされているのだと思います。
ヘッダファイルの中に
#def bool unsigned char
か
#def unsigned char bool
という行がありませんか? あったら、その行をコメントアウトしてください。
そうすれば、エラーが消えると思います。
Answered by Fumu 7 on December 26, 2020
Arduinoの場合、String Objectを使うようです。
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/
これは普通に使えましたよ。
Answered by Chun on December 26, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP