programming online gratis genuino español descargar arduino arduino-ide

online - arduino programming



Arduino: struct pointer como parámetro de función (4)

El código a continuación da el error:

sketch_jul05a:2: error: variable or field ''func'' declared void

Entonces mi pregunta es: ¿cómo puedo pasar un puntero a una estructura como parámetro de función?

Código:

typedef struct { int a,b; } Struc; void func(Struc *p) { } void setup() { Struc s; func(&s); } void loop() { }


El problema es que el Arduino-IDE traduce automáticamente esto en C así:

#line 1 "sketch_jul05a.ino" #include "Arduino.h" void func(Struc *p); void setup(); void loop(); #line 1 typedef struct { int a,b; } Struc; void func(Struc *p) { } void setup() { Struc s; func(&s); } void loop() { }

Lo que significa que Struc se usa en la declaración de func antes de que Struc sea ​​conocido por el compilador de C.

Solución: Mueva la definición de Struc a otro archivo de encabezado e Struc .

Bosquejo principal:

#include "datastructures.h" void func(Struc *p) { } void setup() { Struc s; func(&s); } void loop() { }

y datastructures.h :

struct Struc { int a,b; };


La respuesta anterior funciona. Mientras tanto, también encontré lo siguiente para trabajar, sin necesidad de un archivo .h:

typedef struct MyStruc { int a,b; } Struc; void func(struct MyStruc *p) { } void setup() { Struc s; func(&s); } void loop() { }

Tenga cuidado: la codificación Arduino es un poco escamosa. ¡Muchas de las bibliotecas también son un poco escamosas!


El siguiente código funciona para mí como en Arduino 1.6.3:

typedef struct S { int a; }S; void f(S * s, int v); void f(S * s, int v) { s->a = v; } void setup() { } void loop() { S anObject; // I hate global variables pinMode(13, OUTPUT); // I hate the "setup()" function f(&anObject, 0); // I love ADTs while (1) // I hate the "loop" mechanism { // do something } }


Prolly noticias viejas, pero typedef struct permite funciones de miembros (al menos en IDE 1.6.4). Dependiendo de lo que quieras hacer, por supuesto, pero no puedo pensar en ningún func(struct *p) que no pueda manejarse también con object.func(param pdata) . Solo que algo como p->a = 120; se convierte en algo así como object.setA(120);

typedef struct { byte var1; byte var2; void setVar1(byte val){ this->var1=val; } byte getVar1(void) { return this->var1; } } wtf; wtf testW = {127,15}; void initwtf(byte setVal) { testW.setVar1(setVal); Serial.print("Here is an objective returned value: "); Serial.println(testW.getVar1()); } ... void loop() { initwtf(random(0,100)); }