【解決方法】エラー: タイプ ‘bdaddr_t の一時オブジェクトのアドレスを取得しています

プログラミングQA

[ad_1]

以前にも質問したかもしれませんが、どこだったか思い出せません…。
これはコンパイラ エラーであり、コードは古い C です。
(それが問題かもしれません – C++ への移植…)

実際のアドレスは、コンパイル時には不明です。

コードをあまり変更せずにコンパイラを満足させる方法はありますか?

/mnt/07b7c3f8-0efb-45ab-8df8-2a468771de1f/PROJECTS/JAN21/BT_JAN30_HCI _V1/CCC_SOURCE/Bluetoooth_SPP_Connect/bt_spp_connect_mainwindow.cpp:1455: error: taking the address of a temporary object of type 'bdaddr_t' [-Waddress-of-temporary]
bt_spp_connect_mainwindow.cpp:1455:40: error: taking the address of a temporary object of type 'bdaddr_t' [-Waddress-of-temporary]
                 loc_addr.rc_bdaddr = *BDADDR_ANY;
                                       ^~~~~~~~~~
/usr/include/bluetooth/bluetooth.h:345:23: note: expanded from macro 'BDADDR_ANY'
#define BDADDR_ANY   (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

私が試したこと:

これはコンパイラ エラーです。

#define BDADDR_ANY   (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})

解決策 1

いいえ、コードを使用するたびに実際に何をしているのかを理解するためにコードをよく見る必要がありますが、おそらくグローバルを構築する必要があります const 配列をその場で一緒に投げるのではなく、アドレスを取得した後に正確に何をしているかによって異なります。

それらへのポインターが有用なことを行うのに十分な長さで持続しない一時オブジェクトとコンパイラー構造 – メモリーは既に解放されており、再利用される可能性があります。
これは役立つかもしれません: 一時オブジェクト | マイクロソフト ラーン[^]

解決策 2

何をしているのかわかっている場合は、警告を無効にすることができます。たとえば、次を参照してください。 C++ で警告を無効にする方法 – Fluent C++[^].

[ad_2]

コメント

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