質問編集履歴

2

追記修正

2021/08/13 03:06

投稿

puroguraman
puroguraman

スコア20

test CHANGED
File without changes
test CHANGED
@@ -118,7 +118,7 @@
118
118
 
119
119
 
120
120
 
121
- regi_data.erase(regi_data(begin) + delete_num);
121
+     regi_data.erase(regi_data.begin() + delete_num);
122
122
 
123
123
 
124
124
 
@@ -156,8 +156,16 @@
156
156
 
157
157
 
158
158
 
159
- 追記:
159
+ 追記1
160
160
 
161
161
  kyokio様ご回答ありがとうございます。上記が私の書いたエラーコードです。省略してお伝えしすぎました。すみません。
162
162
 
163
163
  vectorの中にvectorがあるので素直に消えないのかもとか思っています。取り急ぎ上記修正いたします。
164
+
165
+
166
+
167
+ 追記2:
168
+
169
+ fanaさん指摘箇所修正しました。
170
+
171
+ 上記のように修正しても以前指定番号はうまく消せませんでした。

1

編集依頼に対する加筆

2021/08/13 03:06

投稿

puroguraman
puroguraman

スコア20

test CHANGED
File without changes
test CHANGED
@@ -20,29 +20,113 @@
20
20
 
21
21
  ```C++
22
22
 
23
+ //DLLヘッダファイル側
23
24
 
24
25
 
25
- struct A{
26
26
 
27
- int a;
27
+ //データ1
28
28
 
29
+ struct P_DATA {
30
+
31
+ int model_num1;
32
+
33
+ int model_num2;
34
+
29
- float b;
35
+ float para1[10];
36
+
37
+ float para2[10];
38
+
39
+ };
40
+
41
+
42
+
43
+ //データ2
44
+
45
+ struct V_DATA {
46
+
47
+ float V_0[5], V_1[5], V_2[5], V_3[5];
48
+
49
+
50
+
51
+ float N_0[5], N_1[5], N_2[5], N_3[5];
52
+
53
+ };
54
+
55
+
56
+
57
+ //データまとめ
58
+
59
+ struct REGIDATA {
60
+
61
+ //データ1
62
+
63
+ struct P_DATA p_data;
64
+
65
+
66
+
67
+ //データ2
68
+
69
+ std::vector<V_DATA> v_data;
70
+
71
+ };
72
+
73
+
74
+
75
+ ```
76
+
77
+
78
+
79
+
80
+
81
+ ```c++
82
+
83
+ //DLLメインファイル側
84
+
85
+
86
+
87
+ std::vector <REGI_DATA> regi_data;
88
+
89
+
90
+
91
+ //c#側から呼び出し、c++側のデータに追加、うまく追加できていました。
92
+
93
+ bool __stdcall p_model_add(P_DATA* _data){
94
+
95
+
96
+
97
+ p_buff = *_data;
98
+
99
+ regi_data.push_back({ p_buff });
100
+
101
+
102
+
103
+ add_num = regi_data.size() - 1;
104
+
105
+ regi_data[add_num].v_data.push_back({ });
106
+
107
+
108
+
109
+ return true;
30
110
 
31
111
  }
32
112
 
33
113
 
34
114
 
35
- vector<A> v;
115
+ //c#側から呼び出し、C++側の構造体配列の指定要素番号を削除、C#側で英字のエラーが出て強制終了。
36
116
 
37
- v.push_back({ 適当に初期化 });
117
+ bool __stdcall p_model_del(int delete_num){
38
118
 
39
119
 
40
120
 
41
- int num; //消したい数字を指定
121
+ regi_data.erase(regi_data(begin) + delete_num);
42
122
 
43
123
 
44
124
 
45
- v.erase (v.begin() +num);
125
+ return true;
126
+
127
+ }
128
+
129
+
46
130
 
47
131
 
48
132
 
@@ -52,7 +136,7 @@
52
136
 
53
137
  消せずに、cannot seek vector iterator before beginとかでます。
54
138
 
55
- v.begin()をモニタすると10242000とかとてつもなくでかい数字になっています。
139
+ regi_data(begin)をモニタすると10242000とかとてつもなくでかい数字になっています。
56
140
 
57
141
 
58
142
 
@@ -60,14 +144,20 @@
60
144
 
61
145
  ```C++
62
146
 
63
- auto itr = v.begin() + num;
147
+ auto itr = regi_data(begin) + delete_num;
64
148
 
65
- v.erase(itr);
149
+ regi_data.erase(itr);
66
150
 
67
151
  ```
68
152
 
69
153
 
70
154
 
155
+ 構造体配列の場合vectorのeraseが使えないです。どなたか知恵をお貸しください。よろしくお願いいたします。
71
156
 
72
157
 
158
+
159
+ 追記:
160
+
161
+ kyokio様ご回答ありがとうございます。上記が私の書いたエラーコードです。省略してお伝えしすぎました。すみません。
162
+
73
- 構造体配列の場合vectorのerase使えないです。どなた知恵をお貸しください。よろしくお願たします。
163
+ vectorの中にvectorがあるので素直に消えないもとか思ってます取り急ぎ上記修正いたします。