ヘッダーファイルに下のように構造体のネストを宣言したところ、エラーがでました。
いろいろ調べたのですがわからず、解決方法を教えて頂きたいです。
開発環境はvisual stduio 2019です。
c++
1typedef struct { 2 3 int num1; 4 5 int num2; 6 7}POLYGON_DATA; 8 9//面頂点データセット 10struct VERTEX_DATA { 11 12 float V_0[5], V_1[5], V_2[5], V_3[5]; 13 14}; 15 16 17struct REGISTER_DATA { 18 19 POLYGON_DATA model_data; 20 21 std::vector<VERTEX_DATA> surface_data; 22 23};
エラー C2664 'REGISTER_DATA::REGISTER_DATA(REGISTER_DATA &&)': 引数 1 を 'POLYGON_DATA' から 'const REGISTER_DATA &' へ変換できません。
このエラーをクリックするとxmemoryというファイルに飛ばされ下記の部分が指摘されます。
::new (const_cast<void*>(static_cast<const volatile void*>(_Ptr))) _Objty(_STD forward<_Types>(_Args)...);
xmemoryは自分では作っておらずこういうエラーははじめてです。いろいろ調べましたが知恵を貸していただきたくお願いいたします。
修正依頼いただき、出力タブのうち自分が書いた部分に飛ばされた部分を記載します。
1>C:\略\Visual Studio 2019\Dll1\Dll1\Header.h(128,1): message : 'REGISTER_DATA::REGISTER_DATA' の宣言を確認してください
インクルードガード?構造体宣言の名前が変?などなど考えました、
例えば下記のように同じ構造をとってもエラーにはなりませんでした。
struct A{ int a; }; struct B{ A aa; };
actorbug様からのご指摘を受け、コードを最小に削除していった結果、下記の⇒部の記述を消すことでエラーを回避できますが、
本コードはDLLファイルのうち外部(C#フォームアプリ)から使う関数で消したくない内容です。
C++
1//ヘッダファイル側 2namespace Tips_Win32DLL 3{ 4 bool __stdcall DrawSpace(HDC hDC, HWND hWnd); 5 6 ⇒bool __stdcall polygon_model_add(POLYGON_DATA* _data); 7 ⇒bool __stdcall polygon_model_edi(int edi_num, POLYGON_DATA* _data); 8 ⇒bool __stdcall polygon_model_del(int delete_num); 9 10 ⇒bool __stdcall ray_model_add(RAY_DATA* _data); 11 ⇒bool __stdcall ray_model_edi(int edi_num, RAY_DATA* _data); 12 ⇒bool __stdcall ray_model_del(int delete_num); 13 14} 15 16//cppファイル側 17namespace Tips_Win32DLL 18{ 19 20 //バッファ 21 POLYGON_DATA poly_buff; 22 RAY_DATA ray_buff; 23 24 bool __stdcall DrawSpace(HDC hDC, HWND hWnd) 25 { 26 //略 27 } 28 29 //ポリゴンモデル追加 30 bool __stdcall polygon_model_add(POLYGON_DATA* _data) 31 { 32 //フォーム間データ(構造体引数)を単体データとしてバッファに代入 33 poly_buff = *_data; 34 35 //buffを末尾に追加 36 regi_data.emplace_back(poly_buff); 37 38 //表示実験、座標計算格納 39 polygon_vertex_test(regi_data.size() - 1); 40 41 return true; 42 } 43 44 //ポリゴンモデル編集 45 bool __stdcall polygon_model_edi(int edi_num, POLYGON_DATA* _data) 46 { 47 poly_buff = *_data; 48 49 //buffを代入操作 50 regi_data[edi_num].model_data = poly_buff; 51 52 //表示実験、座標計算格納 53 polygon_vertex_test(edi_num); 54 55 return true; 56 } 57 58 //ポリゴンモデル削除 59 bool __stdcall polygon_model_del(int delete_num) 60 { 61 regi_data.erase(regi_data.begin() + (delete_num-1)); 62 63 return true; 64 } 65
DLLの宣言の仕方が悪いのかなと思います。ネットで調べまくっていますが、まずは上記の結果取り急ぎ展開します。
ご指摘いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー