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

回答編集履歴

1

Arduino IDEでコンパイルできるサンプルコードを追記

2021/05/05 08:51

投稿

dodox86
dodox86

スコア9380

answer CHANGED
@@ -50,4 +50,66 @@
50
50
  2
51
51
  3
52
52
  4
53
+ ```
54
+
55
+ ---
56
+ **追記しました:**
57
+ Arduino IDE(1.8.13)でコンパイルできるサンプルコードを以下に示しておきます。
58
+ ```C++
59
+ // arduino
60
+ #include "arduino.h"
61
+
62
+ class TEST{
63
+ public:
64
+ struct Test_Data{
65
+ int32_t Val;
66
+ uint16_t Offset;
67
+ String Name;
68
+ };
69
+
70
+ //この変数に配列の様にアクセスしたい 例)TestAry[2].Valと記述するとLength.Valにアクセスできる等
71
+ Test_Data Height; //[0]
72
+ Test_Data Weight; //[1]
73
+ Test_Data Length; //[2]
74
+ Test_Data Position; //[3]
75
+
76
+ // ポインタ配列でアクセスするメンバー関数
77
+ void example1();
78
+
79
+ private:
80
+ };
81
+
82
+ void TEST::example1() {
83
+ TEST::Test_Data* dataArray[] = {&Height, &Weight, &Length, &Position};
84
+ const int NUM = sizeof(dataArray) / sizeof(dataArray[0]); // (NUM==4)
85
+ for (int i = 0; i < NUM; i++) {
86
+ // 何かする
87
+ dataArray[i]->Val;
88
+ dataArray[i]->Offset;
89
+ dataArray[i]->Name;
90
+ }
91
+ }
92
+
93
+ void setup() {
94
+ TEST obj;
95
+
96
+ obj.Height.Val = 1;
97
+ obj.Weight.Val = 2;
98
+ obj.Length.Val = 3;
99
+ obj.Position.Val = 4;
100
+
101
+ // Height, Weight, Length, Posion の各メンバー変数をポインタ配列にする。
102
+ TEST::Test_Data* dataArray[4] = { &obj.Height, &obj.Weight, &obj.Length, &obj.Position };
103
+ // ループでアクセス
104
+ for (int i = 0; i < 4; i++) {
105
+ dataArray[i]->Val; // 何かする
106
+ }
107
+
108
+ // メンバー関数でアクセス
109
+ obj.example1();
110
+ }
111
+
112
+ void loop() {
113
+ // put your main code here, to run repeatedly:
114
+ }
53
115
  ```