質問編集履歴

1

新たなエラーの追加

2021/05/13 15:46

投稿

TakenMaker
TakenMaker

スコア1

test CHANGED
File without changes
test CHANGED
@@ -183,3 +183,161 @@
183
183
  Serial_Writer::Serial_Writer(PinName TxPin,PinName RxPin,int baudrate):_Serial(TxPin,RxPin,baudrate){}
184
184
 
185
185
  ```
186
+
187
+
188
+
189
+ ### 新しいエラー
190
+
191
+ saitou様のコードを参考に書き換えてみたところ、コンパイルできる寸前で新たなエラーが出てしまったのでお願いします。
192
+
193
+ ```c++
194
+
195
+ #ifndef SERIAL_WRITER
196
+
197
+ #define SERIAL_WRITER
198
+
199
+ #include <mbed.h>
200
+
201
+ #include <iostream>
202
+
203
+
204
+
205
+ class Serial_Writer
206
+
207
+ {
208
+
209
+ private:
210
+
211
+ template <typename T,std::size_t N>
212
+
213
+ struct writer{
214
+
215
+ void write(T (&send)[N],int delay){
216
+
217
+ int num=sizeof(send);
218
+
219
+ char buffer[num+2];
220
+
221
+ for (int i=1,k=0;i<=num;k++){
222
+
223
+ for(int _bitNum=sizeof(send[0])-1;_bitNum>=0;i++,_bitNum--)buffer[i]=(send[k]>>(8*_bitNum))&0xFF;
224
+
225
+ }
226
+
227
+ buffer[0]='[';
228
+
229
+ buffer[num+1]=']';
230
+
231
+ for (int p=0;p<sizeof(buffer);p++)_Serial.putc(buffer[p]);//エラー発生(Error: A nonstatic member reference must be relative to a specific object in "Serial_Writer.h", Line: 19, Col: 48)
232
+
233
+ wait_ms(delay);
234
+
235
+ }
236
+
237
+ };
238
+
239
+
240
+
241
+ template<std::size_t N>
242
+
243
+ struct writer<double,N>{
244
+
245
+ void write(double (&send)[N],int delay){
246
+
247
+ int num=sizeof(send);
248
+
249
+ char buffer[num+2];
250
+
251
+ int send_c[num];
252
+
253
+ for(int _n=0;_n<num;_n++)send_c[_n]=int(send[_n]*100);
254
+
255
+ }
256
+
257
+ };
258
+
259
+
260
+
261
+ template<std::size_t N>
262
+
263
+ struct writer<float,N>{
264
+
265
+ void write(float (&send)[N],int delay){
266
+
267
+ int num=sizeof(send);
268
+
269
+ char buffer[num+2];
270
+
271
+ int send_c[num];
272
+
273
+ for(int _n=0;_n<num;_n++)send_c[_n]=int(send[_n]*100);
274
+
275
+ }
276
+
277
+ };
278
+
279
+
280
+
281
+ template <typename R>
282
+
283
+ inline int receive(R &get){
284
+
285
+ int num=sizeof(get);
286
+
287
+ int num_0=sizeof(get[0]);
288
+
289
+ char buffer[num+2];
290
+
291
+ if (_Serial.readable()){
292
+
293
+ for(int i=0;i<sizeof(buffer);i++){
294
+
295
+ buffer[i]=_Serial.getc();
296
+
297
+ if(buffer[0]!='[')return -1;
298
+
299
+ }
300
+
301
+ if(buffer[num+1]==']'){
302
+
303
+ for (int s=0;s<(num/num_0);s++)get[s]=0x0;
304
+
305
+ for (int p=1,k=0;p<=num;k++){
306
+
307
+ for (int _byte=num_0-1;_byte>=0;p++,_byte--)get[k]|=buffer[p]<<(8*_byte);
308
+
309
+ }
310
+
311
+ return 0;//正常終了
312
+
313
+ }else return -1;//異常終了1(正しく受信していない)
314
+
315
+ }else return -2;//異常終了2(受信しない)
316
+
317
+ }
318
+
319
+
320
+
321
+ public:
322
+
323
+ Serial_Writer(PinName TxPin,PinName RxPin,int baudrate);
324
+
325
+ template<typename T,std::size_t N>void write(T (&send)[N],int delay){
326
+
327
+ struct writer<T,N> k;
328
+
329
+ k.write(send,delay);//ここでも同様のエラーがでましたがインスタンスを生成すると治りました
330
+
331
+ }
332
+
333
+ Serial _Serial;
334
+
335
+ };
336
+
337
+
338
+
339
+
340
+
341
+ #endif
342
+
343
+ ```