質問するログイン新規登録

質問編集履歴

2

追記修正

2021/08/13 03:06

投稿

puroguraman
puroguraman

スコア20

title CHANGED
File without changes
body CHANGED
@@ -58,7 +58,7 @@
58
58
  //c#側から呼び出し、C++側の構造体配列の指定要素番号を削除、C#側で英字のエラーが出て強制終了。
59
59
  bool __stdcall p_model_del(int delete_num){
60
60
 
61
- regi_data.erase(regi_data(begin) + delete_num);
61
+     regi_data.erase(regi_data.begin() + delete_num);
62
62
 
63
63
  return true;
64
64
  }
@@ -77,6 +77,10 @@
77
77
 
78
78
  構造体配列の場合vectorのeraseが使えないです。どなたか知恵をお貸しください。よろしくお願いいたします。
79
79
 
80
- 追記:
80
+ 追記1
81
81
  kyokio様ご回答ありがとうございます。上記が私の書いたエラーコードです。省略してお伝えしすぎました。すみません。
82
- vectorの中にvectorがあるので素直に消えないのかもとか思っています。取り急ぎ上記修正いたします。
82
+ vectorの中にvectorがあるので素直に消えないのかもとか思っています。取り急ぎ上記修正いたします。
83
+
84
+ 追記2:
85
+ fanaさん指摘箇所修正しました。
86
+ 上記のように修正しても以前指定番号はうまく消せませんでした。

1

編集依頼に対する加筆

2021/08/13 03:06

投稿

puroguraman
puroguraman

スコア20

title CHANGED
File without changes
body CHANGED
@@ -9,29 +9,74 @@
9
9
 
10
10
  しかし下記のように構造体配列にすると
11
11
  ```C++
12
+ //DLLヘッダファイル側
12
13
 
14
+ //データ1
13
- struct A{
15
+ struct P_DATA {
14
- int a;
16
+ int model_num1;
17
+ int model_num2;
15
- float b;
18
+ float para1[10];
19
+ float para2[10];
20
+ };
21
+
22
+ //データ2
23
+ struct V_DATA {
24
+ float V_0[5], V_1[5], V_2[5], V_3[5];
25
+
26
+ float N_0[5], N_1[5], N_2[5], N_3[5];
27
+ };
28
+
29
+ //データまとめ
30
+ struct REGIDATA {
31
+ //データ1
32
+ struct P_DATA p_data;
33
+
34
+ //データ2
35
+ std::vector<V_DATA> v_data;
36
+ };
37
+
38
+ ```
39
+
40
+
41
+ ```c++
42
+ //DLLメインファイル側
43
+
44
+ std::vector <REGI_DATA> regi_data;
45
+
46
+ //c#側から呼び出し、c++側のデータに追加、うまく追加できていました。
47
+ bool __stdcall p_model_add(P_DATA* _data){
48
+
49
+ p_buff = *_data;
50
+ regi_data.push_back({ p_buff });
51
+
52
+ add_num = regi_data.size() - 1;
53
+ regi_data[add_num].v_data.push_back({ });
54
+
55
+ return true;
16
56
  }
17
57
 
18
- vector<A> v;
58
+ //c#側から呼び出し、C++側の構造体配列の指定要素番号を削除、C#側で英字のエラーが出て強制終了。
19
- v.push_back({ 適当に初期化 });
59
+ bool __stdcall p_model_del(int delete_num){
20
60
 
21
- int num; //消したい数字を指定
61
+ regi_data.erase(regi_data(begin) + delete_num);
22
62
 
23
- v.erase (v.begin() +num);
63
+ return true;
64
+ }
24
65
 
66
+
25
67
  ```
26
68
 
27
69
  消せずに、cannot seek vector iterator before beginとかでます。
28
- v.begin()をモニタすると10242000とかとてつもなくでかい数字になっています。
70
+ regi_data(begin)をモニタすると10242000とかとてつもなくでかい数字になっています。
29
71
 
30
72
  イテレータを勉強して下記のようにしてもNGでした。
31
73
  ```C++
32
- auto itr = v.begin() + num;
74
+ auto itr = regi_data(begin) + delete_num;
33
- v.erase(itr);
75
+ regi_data.erase(itr);
34
76
  ```
35
77
 
78
+ 構造体配列の場合vectorのeraseが使えないです。どなたか知恵をお貸しください。よろしくお願いいたします。
36
79
 
80
+ 追記:
81
+ kyokio様ご回答ありがとうございます。上記が私の書いたエラーコードです。省略してお伝えしすぎました。すみません。
37
- 構造体配列の場合vectorのerase使えないです。どなた知恵をお貸しください。よろしくお願たします。
82
+ vectorの中にvectorあるので素直に消えないもとか思ってます取り急ぎ上記修正いたします。