Arduino - 结构超出范围的原因?

时间:2015-07-25 20:37:58

标签: c arduino

我在一个电机程序(我必须控制多个电机,这就是为什么我使用结构)和我的arduino MEGA一起工作。 当我在驱动功能中使用它作为参数时,我不明白为什么MOTOR超出了范围:

typedef struct motor
{
   int EN;
   /*some more ints*/
}MOTOR;

MOTOR mot1;
MOTOR mot2; /*this works with no compile error*/
int drive (MOTOR*) /*here i have compile error out of scope, neither with or without pointer*/
{
   return 1;
}

void setup()
{}

void loop()
{}


sketch_jul25a:2: error: 'MOTOR' was not declared in this scope
sketch_jul25a:2: error: expected primary-expression before ')' token
sketch_jul25a.ino: In function 'int drive(MOTOR*)':
sketch_jul25a:9: error: 'int drive(MOTOR*)' redeclared as different kind of symbol
sketch_jul25a:2: error: previous declaration of 'int drive'
'MOTOR' was not declared in this scope

3 个答案:

答案 0 :(得分:5)

因为走向地狱的道路是出于良好的意图。

Arduino IDE通过在代码开头为所有用户定义的函数生成原型来尝试提供帮助。当其中一个原型引用用户定义的类型时,事情会以所描述的方式爆炸。

诀窍是让IDE无法解析代码:

            [0:000> !AnalyzeOOM
        ---------Heap 11---------
        Managed OOM occured after GC #15967 (Requested to allocate 0 bytes)
        Reason: Low on memory during GC
        Detail: SOH: Failed to reserve memory (16777216 bytes)
        ---------Heap 20---------
        Managed OOM occured after GC #15977 (Requested to allocate 0 bytes)
        Reason: Low on memory during GC
        Detail: SOH: Failed to reserve memory (16777216 bytes)
        ---------Heap 21---------
        Managed OOM occured after GC #15979 (Requested to allocate 0 bytes)
        Reason: Low on memory during GC
        Detail: SOH: Failed to reserve memory (16777216 bytes)
        ---------Heap 22---------
        Managed OOM occured after GC #15529 (Requested to allocate 0 bytes)
        Reason: Low on memory during GC
        Detail: SOH: Failed to reserve memory (16777216 bytes)
        ---------Heap 23---------
        Managed OOM occured after GC #15975 (Requested to allocate 0 bytes)
        Reason: Low on memory during GC
        Detail: SOH: Failed to reserve memory (16777216 bytes)
        ---------Heap 25---------
        Managed OOM occured after GC #15985 (Requested to allocate 0 bytes)
        Reason: Low on memory during GC
        Detail: SOH: Failed to reserve memory (16777216 bytes)
        ---------Heap 27---------
        Managed OOM occured after GC #40008 (Requested to allocate 0 bytes)
        Reason: Low on memory during GC
        Detail: SOH: Failed to reserve memory (16777216 bytes)
        ---------Heap 30---------
        Managed OOM occured after GC #40006 (Requested to allocate 0 bytes)
        Reason: Low on memory during GC
        Detail: SOH: Failed to reserve memory (16777216 bytes)


    0:000> !vmstat
    TYPE                      MINIMUM                      MAXIMUM                      AVERAGE  BLK COUNT                        TOTAL
    ~~~~                      ~~~~~~~                      ~~~~~~~                      ~~~~~~~  ~~~~~~~~~                        ~~~~~
    Free:
    Small                          4K                          64K                          57K      4,651                     266,932K
    Medium                        68K                       1,024K                         288K         97                      27,967K
    Large                      1,088K                       6,080K                       2,305K         27                      62,247K
    Summary                        4K                       6,080K                          74K      4,775                     357,150K

    Reserve:
    Small                          4K                          64K                          12K        926                      11,567K
    Medium                        68K                       1,020K                         277K        390                     108,263K
    Large                      1,148K                      16,376K                      12,201K        190                   2,318,211K
    Summary                        4K                      16,376K                       1,618K      1,506                   2,438,043K

    Commit:
    Small                          4K                          64K                          10K      8,169                      85,567K
    Medium                        68K                       1,024K                         322K        552                     178,023K
    Large                      1,028K                      23,300K                       5,137K        221                   1,135,447K
    Summary                        4K                      23,300K                         156K      8,942                   1,399,038K

    Private:
    Small                          4K                          64K                          11K      5,939                      65,578K
    Medium                        68K                       1,024K                         311K        472                     146,891K
    Large                      1,028K                      23,300K                       9,725K        316                   3,073,339K
    Summary                        4K                      23,300K                         488K      6,727                   3,285,811K

    Mapped:
    Small                          4K                          64K                          11K         85                         979K
    Medium                        68K                       1,004K                         366K         12                       4,399K
    Large                      1,520K                       2,888K                       2,206K          4                       8,824K
    Summary                        4K                       2,888K                         140K        101                      14,203K

    Image:
    Small                          4K                          64K                           9K      3,071                      30,575K
    Medium                        68K                       1,024K                         294K        458                     134,995K
    Large                      1,032K                      15,480K                       4,082K         91                     371,495K
    Summary                        4K                      15,480K                         148K      3,620                     537,064K][1]




#############################

0:000> !eeheap -gc
Number of GC Heaps: 32
------------------------------
Heap 0 (1a616d08)
generation 0 starts at 0xa062179c
generation 1 starts at 0xa0621000
generation 2 starts at 0x1ab91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
1ab90000  1ab91000  1adce1c8  0x23d1c8(2347464)
a0620000  a0621000  a0867db8  0x246db8(2387384)
Large object heap starts at 0x3ab91000
         segment             begin         allocated  size
3ab90000  3ab91000  3b343490  0x7b2490(8070288)
Heap Size:       Size: 0xc36410 (12805136) bytes.
------------------------------
Heap 1 (1a619970)
generation 0 starts at 0xa965da00
generation 1 starts at 0xa9621000
generation 2 starts at 0x1bb91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
1bb90000  1bb91000  1be9bbd0  0x30abd0(3189712)
a9620000  a9621000  a982dd14  0x20cd14(2149652)
Large object heap starts at 0x3b391000
         segment             begin         allocated  size
3b390000  3b391000  3bae09f0  0x74f9f0(7666160)
Heap Size:       Size: 0xc672d4 (13005524) bytes.
------------------------------
Heap 2 (1a6215d8)
generation 0 starts at 0xa762370c
generation 1 starts at 0xa7621000
generation 2 starts at 0x1cb91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
1cb90000  1cb91000  1d0a4604  0x513604(5322244)
a7620000  a7621000  a78a3a20  0x282a20(2632224)
Large object heap starts at 0x3bb91000
         segment             begin         allocated  size
3bb90000  3bb91000  3c384cf8  0x7f3cf8(8338680)
736b0000  736b1000  73769790  0xb8790(755600)
Heap Size:       Size: 0x10424ac (17048748) bytes.
------------------------------
Heap 3 (1a624240)
generation 0 starts at 0xb56226d0
generation 1 starts at 0xb5621000
generation 2 starts at 0x1db91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
1db90000  1db91000  1debd778  0x32c778(3327864)
b5620000  b5621000  b56346dc  0x136dc(79580)
Large object heap starts at 0x3c391000
         segment             begin         allocated  size
3c390000  3c391000  3c88b720  0x4fa720(5220128)
Heap Size:       Size: 0x83a574 (8627572) bytes.
------------------------------
Heap 4 (1a626ea8)
generation 0 starts at 0x9762eb1c
generation 1 starts at 0x97621000
generation 2 starts at 0x1eb91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
1eb90000  1eb91000  1ee6ae1c  0x2d9e1c(2989596)
97620000  97621000  97a87308  0x466308(4612872)
Large object heap starts at 0x3cb91000
         segment             begin         allocated  size
3cb90000  3cb91000  3d36c7b8  0x7db7b8(8239032)
f9e70000  f9e71000  f9e975a0  0x265a0(157088)
Heap Size:       Size: 0xf41e7c (15998588) bytes.
------------------------------
Heap 5 (1a639b10)
generation 0 starts at 0x8f62107c
generation 1 starts at 0x8f621000
generation 2 starts at 0x1fb91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
1fb90000  1fb91000  20b8500c  0xff400c(16728076)
8f620000  8f621000  8f777088  0x156088(1400968)
Large object heap starts at 0x3d391000
         segment             begin         allocated  size
3d390000  3d391000  3d903cb0  0x572cb0(5713072)
Heap Size:       Size: 0x16bcd44 (23842116) bytes.
------------------------------
Heap 6 (1a63c778)
generation 0 starts at 0xba6611e8
generation 1 starts at 0xba621000
generation 2 starts at 0x20b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
20b90000  20b91000  20e66118  0x2d5118(2969880)
ba620000  ba621000  ba7051f4  0xe41f4(934388)
Large object heap starts at 0x3db91000
         segment             begin         allocated  size
3db90000  3db91000  3e348dd8  0x7b7dd8(8093144)
Heap Size:       Size: 0xb710e4 (11997412) bytes.
------------------------------
Heap 7 (1a63f3e0)
generation 0 starts at 0xad621918
generation 1 starts at 0xad621000
generation 2 starts at 0x21b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
21b90000  21b91000  21fe7dd0  0x456dd0(4550096)
ad620000  ad621000  adad37e8  0x4b27e8(4925416)
Large object heap starts at 0x3e391000
         segment             begin         allocated  size
3e390000  3e391000  3eaea868  0x759868(7706728)
Heap Size:       Size: 0x1062e20 (17182240) bytes.
------------------------------
Heap 8 (1a642048)
generation 0 starts at 0xf5e724e0
generation 1 starts at 0xf5e71000
generation 2 starts at 0x22b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
22b90000  22b91000  22ee2cc8  0x351cc8(3480776)
f5e70000  f5e71000  f5eb04ec  0x3f4ec(259308)
Large object heap starts at 0x3eb91000
         segment             begin         allocated  size
3eb90000  3eb91000  3f03b3c0  0x4aa3c0(4891584)
Heap Size:       Size: 0x83b574 (8631668) bytes.
------------------------------
Heap 9 (1a648cb0)
generation 0 starts at 0x8d630bc4
generation 1 starts at 0x8d621000
generation 2 starts at 0x23b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
23b90000  23b91000  23e4d69c  0x2bc69c(2868892)
8d620000  8d621000  8daf7fb4  0x4d6fb4(5074868)
Large object heap starts at 0x3f391000
         segment             begin         allocated  size
3f390000  3f391000  3f991138  0x600138(6291768)
Heap Size:       Size: 0xd93788 (14235528) bytes.
------------------------------
Heap 10 (1a64b918)
generation 0 starts at 0xa86261d0
generation 1 starts at 0xa8621000
generation 2 starts at 0x24b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
24b90000  24b91000  250b5b3c  0x524b3c(5393212)
a8620000  a8621000  a891ad34  0x2f9d34(3120436)
Large object heap starts at 0x3fb91000
         segment             begin         allocated  size
3fb90000  3fb91000  3ff89810  0x3f8810(4163600)
Heap Size:       Size: 0xc17080 (12677248) bytes.
------------------------------
Heap 11 (1a64e580)
generation 0 starts at 0x916238ec
generation 1 starts at 0x91621000
generation 2 starts at 0x25b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
25b90000  25b91000  25ea5d64  0x314d64(3231076)
91620000  91621000  91930198  0x30f198(3207576)
Large object heap starts at 0x40391000
         segment             begin         allocated  size
40390000  40391000  40ac8f50  0x737f50(7569232)
Heap Size:       Size: 0xd5be4c (14007884) bytes.
------------------------------
Heap 12 (1a65b850)
generation 0 starts at 0x7c52281c
generation 1 starts at 0x7c521000
generation 2 starts at 0x26b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
26b90000  26b91000  2702cad8  0x49bad8(4831960)
7c520000  7c521000  7c7b662c  0x29562c(2709036)
Large object heap starts at 0x40b91000
         segment             begin         allocated  size
40b90000  40b91000  41378c38  0x7e7c38(8289336)
e73d0000  e73d1000  e78cce00  0x4fbe00(5225984)
Heap Size:       Size: 0x1414b3c (21056316) bytes.
------------------------------
Heap 13 (1a65ef20)
generation 0 starts at 0xf7e77370
generation 1 starts at 0xf7e71000
generation 2 starts at 0x27b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
27b90000  27b91000  27ee43d4  0x3533d4(3486676)
f7e70000  f7e71000  f828f6fc  0x41e6fc(4318972)
Large object heap starts at 0x41391000
         segment             begin         allocated  size
41390000  41391000  41b8edf0  0x7fddf0(8379888)
ebc80000  ebc81000  ec460740  0x7df740(8255296)
7e520000  7e521000  7e56dba8  0x4cba8(314280)
Heap Size:       Size: 0x179bba8 (24755112) bytes.
------------------------------
Heap 14 (1a661458)
generation 0 starts at 0x9e65f268
generation 1 starts at 0x9e621000
generation 2 starts at 0x28b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
28b90000  28b91000  28f1aacc  0x389acc(3709644)
9e620000  9e621000  9e96f57c  0x34e57c(3466620)
Large object heap starts at 0x41b91000
         segment             begin         allocated  size
41b90000  41b91000  42268f58  0x6d7f58(7176024)
Heap Size:       Size: 0xdaffa0 (14352288) bytes.
------------------------------
Heap 15 (1a663990)
generation 0 starts at 0x9faacc7c
generation 1 starts at 0x9faa8ac4
generation 2 starts at 0x29b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
29b90000  29b91000  29cde0e8  0x14d0e8(1364200)
9f620000  9f621000  9fd16c88  0x6f5c88(7298184)
Large object heap starts at 0x42391000
         segment             begin         allocated  size
42390000  42391000  42adf6a0  0x74e6a0(7661216)
Heap Size:       Size: 0xf91410 (16323600) bytes.
------------------------------
Heap 16 (1a665ec8)
generation 0 starts at 0xc362a47c
generation 1 starts at 0xc3621000
generation 2 starts at 0x2ab91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
2ab90000  2ab91000  2afbc464  0x42b464(4371556)
c3620000  c3621000  c3854488  0x233488(2307208)
Large object heap starts at 0x42b91000
         segment             begin         allocated  size
42b90000  42b91000  42f635f8  0x3d25f8(4007416)
Heap Size:       Size: 0xa30ee4 (10686180) bytes.
------------------------------
Heap 17 (1a668418)
generation 0 starts at 0x94622638
generation 1 starts at 0x94621000
generation 2 starts at 0x2bb91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
2bb90000  2bb91000  2bfd1374  0x440374(4457332)
94620000  94621000  948da24c  0x2b924c(2855500)
Large object heap starts at 0x43391000
         segment             begin         allocated  size
43390000  43391000  43b7a280  0x7e9280(8295040)
67350000  67351000  6739db20  0x4cb20(314144)
Heap Size:       Size: 0xf2f360 (15922016) bytes.
------------------------------
Heap 18 (1a669d20)
generation 0 starts at 0x9a621f68
generation 1 starts at 0x9a621000
generation 2 starts at 0x2cb91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
2cb90000  2cb91000  2ce5c30c  0x2cb30c(2929420)
9a620000  9a621000  9a6e597c  0xc497c(805244)
Large object heap starts at 0x43b91000
         segment             begin         allocated  size
43b90000  43b91000  43f1f520  0x38e520(3728672)
Heap Size:       Size: 0x71e1a8 (7463336) bytes.
------------------------------
Heap 19 (1a66b628)
generation 0 starts at 0x83641300
generation 1 starts at 0x83621000
generation 2 starts at 0x2db91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
2db90000  2db91000  2dfaecb8  0x41dcb8(4316344)
83620000  83621000  83855614  0x234614(2311700)
Large object heap starts at 0x44391000
         segment             begin         allocated  size
44390000  44391000  44a37488  0x6a6488(6972552)
Heap Size:       Size: 0xcf8754 (13600596) bytes.
------------------------------
Heap 20 (1a66cf30)
generation 0 starts at 0x8b621738
generation 1 starts at 0x8b621000
generation 2 starts at 0x2eb91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
2eb90000  2eb91000  2ef0c5e4  0x37b5e4(3651044)
8b620000  8b621000  8b94d484  0x32c484(3327108)
Large object heap starts at 0x44b91000
         segment             begin         allocated  size
44b90000  44b91000  450100c0  0x47f0c0(4714688)
Heap Size:       Size: 0xb26b28 (11692840) bytes.
------------------------------
Heap 21 (1a66e838)
generation 0 starts at 0xf31d3830
generation 1 starts at 0xf31d1000
generation 2 starts at 0x2fb91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
2fb90000  2fb91000  2fe8b854  0x2fa854(3123284)
f31d0000  f31d1000  f35a9948  0x3d8948(4032840)
Large object heap starts at 0x45391000
         segment             begin         allocated  size
45390000  45391000  458c3008  0x532008(5447688)
Heap Size:       Size: 0xc051a4 (12603812) bytes.
------------------------------
Heap 22 (1a670140)
generation 0 starts at 0x9867de74
generation 1 starts at 0x98621000
generation 2 starts at 0x30b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
30b90000  30b91000  3102bbdc  0x49abdc(4828124)
98620000  98621000  988edc84  0x2ccc84(2935940)
Large object heap starts at 0x45b91000
         segment             begin         allocated  size
45b90000  45b91000  462adab8  0x71cab8(7457464)
Heap Size:       Size: 0xe84318 (15221528) bytes.
------------------------------
Heap 23 (1a671a48)
generation 0 starts at 0xe8c810dc
generation 1 starts at 0xe8c81000
generation 2 starts at 0x31b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
31b90000  31b91000  31de8af0  0x257af0(2456304)
e8c80000  e8c81000  e8f756f8  0x2f46f8(3098360)
Large object heap starts at 0x46391000
         segment             begin         allocated  size
46390000  46391000  467d71b0  0x4461b0(4481456)
Heap Size:       Size: 0x992398 (10036120) bytes.
------------------------------
Heap 24 (1a673350)
generation 0 starts at 0xa1621544
generation 1 starts at 0xa1621000
generation 2 starts at 0x32b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
32b90000  32b91000  32f74f04  0x3e3f04(4079364)
a1620000  a1621000  a1803858  0x1e2858(1976408)
Large object heap starts at 0x46b91000
         segment             begin         allocated  size
46b90000  46b91000  4737fc08  0x7eec08(8317960)
67b90000  67b91000  67d11100  0x180100(1573120)
Heap Size:       Size: 0xf35464 (15946852) bytes.
------------------------------
Heap 25 (1a674c58)
generation 0 starts at 0x8c6222b8
generation 1 starts at 0x8c621000
generation 2 starts at 0x33b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
33b90000  33b91000  33edff20  0x34ef20(3469088)
8c620000  8c621000  8ca2c690  0x40b690(4241040)
Large object heap starts at 0x47391000
         segment             begin         allocated  size
47390000  47391000  47a011a0  0x6701a0(6750624)
Heap Size:       Size: 0xdca750 (14460752) bytes.
------------------------------
Heap 26 (1a676560)
generation 0 starts at 0x9b62150c
generation 1 starts at 0x9b621000
generation 2 starts at 0x34b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
34b90000  34b91000  34fa6200  0x415200(4280832)
9b620000  9b621000  9b8b531c  0x29431c(2704156)
Large object heap starts at 0x47b91000
         segment             begin         allocated  size
47b90000  47b91000  48373ec0  0x7e2ec0(8269504)
7aa10000  7aa11000  7ab44168  0x133168(1257832)
Heap Size:       Size: 0xfbf544 (16512324) bytes.
------------------------------
Heap 27 (1a677e68)
generation 0 starts at 0x92630b90
generation 1 starts at 0x92621000
generation 2 starts at 0x35b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
35b90000  35b91000  361323f0  0x5a13f0(5903344)
92620000  92621000  929fcd4c  0x3dbd4c(4046156)
Large object heap starts at 0x48391000
         segment             begin         allocated  size
48390000  48391000  48b76c48  0x7e5c48(8281160)
f0680000  f0681000  f06f4570  0x73570(472432)
Heap Size:       Size: 0x11d62f4 (18703092) bytes.
------------------------------
Heap 28 (1a679770)
generation 0 starts at 0xe1c610dc
generation 1 starts at 0xe1c61000
generation 2 starts at 0x36b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
36b90000  36b91000  37076c64  0x4e5c64(5135460)
e1c60000  e1c61000  e1ed5044  0x274044(2572356)
Large object heap starts at 0x48b91000
         segment             begin         allocated  size
48b90000  48b91000  4937c3a8  0x7eb3a8(8303528)
f51d0000  f51d1000  f56afdf8  0x4dedf8(5107192)
Heap Size:       Size: 0x1423e48 (21118536) bytes.
------------------------------
Heap 29 (1a67b078)
generation 0 starts at 0xa6621380
generation 1 starts at 0xa6621000
generation 2 starts at 0x37b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
37b90000  37b91000  37ecffc0  0x33efc0(3403712)
a6620000  a6621000  a6873190  0x252190(2433424)
Large object heap starts at 0x49391000
         segment             begin         allocated  size
49390000  49391000  49a365c8  0x6a55c8(6968776)
Heap Size:       Size: 0xc36718 (12805912) bytes.
------------------------------
Heap 30 (1a67c980)
generation 0 starts at 0xb36238ac
generation 1 starts at 0xb3621000
generation 2 starts at 0x38b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
38b90000  38b91000  38eda4b8  0x3494b8(3445944)
b3620000  b3621000  b36978b8  0x768b8(485560)
Large object heap starts at 0x49b91000
         segment             begin         allocated  size
49b90000  49b91000  49ffd360  0x46c360(4637536)
Heap Size:       Size: 0x82c0d0 (8569040) bytes.
------------------------------
Heap 31 (1a67e288)
generation 0 starts at 0x79a11784
generation 1 starts at 0x79a11000
generation 2 starts at 0x39b91000
ephemeral segment allocation context: none
         segment             begin         allocated  size
39b90000  39b91000  3a35caf0  0x7cbaf0(8174320)
79a10000  79a11000  79ec789c  0x4b689c(4941980)
Large object heap starts at 0x4a391000
         segment             begin         allocated  size
4a390000  4a391000  4a94e330  0x5bd330(6017840)
Heap Size:       Size: 0x123f6bc (19134140) bytes.
------------------------------
GC Heap Size:    Size: 0x1c1341b8 (471024056) bytes.

IDE运行到namespace { int drive (MOTOR*) { return 1; } } 并且不知道如何处理后面的块,所以跳过它。

答案 1 :(得分:1)

我建议这应该和命名空间选项一样好吗?

struct motor
{
   int EN;
   /*some more ints*/
};
int drive (motor* mtr);
motor mot1;
motor mot2; /*this works with no compile error*/

  int drive (motor* mtr)
  {
   return 1;
  }


void setup()
{}

void loop()
{
  int a = drive(&mot1);
}

答案 2 :(得分:0)

编辑:我的原始答案做了一些假设,即Arduino IDE比实际更接近AVR-GCC。对于那些熟悉C或C ++并且正在使用这些芯片做大量工作的人的一般建议是直接使用Atmel studio和AVR-GCC,因为这样会遇到更少的问题。

Arduino实际上是C ++,但在将代码转换为为芯片编译的C ++代码之前,它会进行一些预处理(比如从mainsetup创建loop)。您遇到的问题是由于预处理步骤而导致Ignacio Vazquez-Abrams' answer解释。

作为更通用的c ++用法说明,我建议将结构定义更改为:

struct motor
{
   int EN;
   /*some more ints*/
};

您可能需要阅读Difference between 'struct' and 'typedef struct' in C++?以了解为什么c ++中的内容会有所不同。