現在,C言語のプロジェクトをC++のプロジェクトとして書き換えています.詳細としては,ESP-8266というマイコンで,FreeOSというRTOSを使ってwi-fiのアクセスポイントへ接続し,ネットへ接続しようとしております.
サンプルプログラムでは,下記のようなプログラムが与えられており,WIFI_SSIDとWIFI_PASSを書き換えることで問題無く接続が可能となっております.しかし,ファイル名をmain.cからmain.cppへと変更すると,C++ 99 "ssid" outside aggregate initializerなどと表示され,コンパイルが通らない状況です.原因として,C99の機能であり,C++では用いることができないということがわかり,これを書き換えたいと考えております.
C
1 #define WIFI_SSID "hoge" 2 #define WIFI_PASS "piyo" 3 4 ~~~~~~ 5 中略 6 ~~~~~~ 7 8 struct sdk_station_config config = { 9 .ssid = WIFI_SSID, 10 .password = WIFI_PASS, 11 };
そこで,以下のようにプログラムを書換え,対処を行いました.コンパイルエラー自体はこれで回避することができたのですが,実際にプログラムを実行してみると,アクセスポイントの接続に失敗している状態となっており,文字列の取り扱いに問題があるのではないかと推測できる症状が発生しております.sdk_station_configが定義されているヘッダファイルには,NULL TERMINATED STRINGと書かれており,ヌル終端文字列(?)であるようなのですが,このような場合,どのように書き換えるのが適切なのでしょうか?
C++
1 #define WIFI_SSID "hoge" 2 #define WIFI_PASS "piyo" 3 4 ~~~~~~ 5 中略 6 ~~~~~~ 7 8 struct sdk_station_config config; 9 *(config.ssid) = WIFI_SSID; 10 *(config.password) = WIFI_PASS;
失礼いたしました.ご指摘いただきました,sdk_station_config構造体の定義を記載いたします.
C
1struct sdk_station_config { 2 uint8_t ssid[32]; /* Null terminated string */ 3 uint8_t password[64]; /* Null terminated string */ 4 uint8_t bssid_set; /* One if bssid is used, otherwise zero. */ 5 uint8_t bssid[6]; /* The BSSID bytes */ 6};
yohhoyさんよりご指摘いただきました,C++コンパイラのバージョンについて追記です.
以下,
$ gcc --version Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/c++/4.2.1 Apple LLVM version 9.0.0 (clang-900.0.38) Target: x86_64-apple-darwin17.2.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
また,使用しているOSはOS X 10.13.1です.
回答4件
あなたの回答
tips
プレビュー