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

質問編集履歴

1

新たなエラーの追加

2021/05/13 15:46

投稿

TakenMaker
TakenMaker

スコア1

title CHANGED
File without changes
body CHANGED
@@ -90,4 +90,83 @@
90
90
  #include <Serial_Writer.h>
91
91
 
92
92
  Serial_Writer::Serial_Writer(PinName TxPin,PinName RxPin,int baudrate):_Serial(TxPin,RxPin,baudrate){}
93
+ ```
94
+
95
+ ### 新しいエラー
96
+ saitou様のコードを参考に書き換えてみたところ、コンパイルできる寸前で新たなエラーが出てしまったのでお願いします。
97
+ ```c++
98
+ #ifndef SERIAL_WRITER
99
+ #define SERIAL_WRITER
100
+ #include <mbed.h>
101
+ #include <iostream>
102
+
103
+ class Serial_Writer
104
+ {
105
+ private:
106
+ template <typename T,std::size_t N>
107
+ struct writer{
108
+ void write(T (&send)[N],int delay){
109
+ int num=sizeof(send);
110
+ char buffer[num+2];
111
+ for (int i=1,k=0;i<=num;k++){
112
+ for(int _bitNum=sizeof(send[0])-1;_bitNum>=0;i++,_bitNum--)buffer[i]=(send[k]>>(8*_bitNum))&0xFF;
113
+ }
114
+ buffer[0]='[';
115
+ buffer[num+1]=']';
116
+ 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)
117
+ wait_ms(delay);
118
+ }
119
+ };
120
+
121
+ template<std::size_t N>
122
+ struct writer<double,N>{
123
+ void write(double (&send)[N],int delay){
124
+ int num=sizeof(send);
125
+ char buffer[num+2];
126
+ int send_c[num];
127
+ for(int _n=0;_n<num;_n++)send_c[_n]=int(send[_n]*100);
128
+ }
129
+ };
130
+
131
+ template<std::size_t N>
132
+ struct writer<float,N>{
133
+ void write(float (&send)[N],int delay){
134
+ int num=sizeof(send);
135
+ char buffer[num+2];
136
+ int send_c[num];
137
+ for(int _n=0;_n<num;_n++)send_c[_n]=int(send[_n]*100);
138
+ }
139
+ };
140
+
141
+ template <typename R>
142
+ inline int receive(R &get){
143
+ int num=sizeof(get);
144
+ int num_0=sizeof(get[0]);
145
+ char buffer[num+2];
146
+ if (_Serial.readable()){
147
+ for(int i=0;i<sizeof(buffer);i++){
148
+ buffer[i]=_Serial.getc();
149
+ if(buffer[0]!='[')return -1;
150
+ }
151
+ if(buffer[num+1]==']'){
152
+ for (int s=0;s<(num/num_0);s++)get[s]=0x0;
153
+ for (int p=1,k=0;p<=num;k++){
154
+ for (int _byte=num_0-1;_byte>=0;p++,_byte--)get[k]|=buffer[p]<<(8*_byte);
155
+ }
156
+ return 0;//正常終了
157
+ }else return -1;//異常終了1(正しく受信していない)
158
+ }else return -2;//異常終了2(受信しない)
159
+ }
160
+
161
+ public:
162
+ Serial_Writer(PinName TxPin,PinName RxPin,int baudrate);
163
+ template<typename T,std::size_t N>void write(T (&send)[N],int delay){
164
+ struct writer<T,N> k;
165
+ k.write(send,delay);//ここでも同様のエラーがでましたがインスタンスを生成すると治りました
166
+ }
167
+ Serial _Serial;
168
+ };
169
+
170
+
171
+ #endif
93
172
  ```