Autor
|
Tema: [C]Es posible tener una funcion en un struct? (Leído 2,461 veces)
|
huchoko
|
Es posible (en C) tener una función dentro de un struct? Algo así más o menos: struct foo { int bar = 3; int sumar(int x, int y); }; int sumar(int x, int y) { x += y; } int main() { struct foo asd; int spam = asd.bar; asd.sumar(5, 5); return 0; }
Escuche que en C++ se podía, pero como lo puedo hacer en C? La idea seria tener funciones mas organizadas, se podría con POO si estuviera en C++, pero sinceramente me da asco la forma en que se declaran clases en C++ , aparte que solo puedo usar C ahora. Saludos
|
|
|
En línea
|
|
|
|
K-YreX
|
Creo que puramente en C no se puede ya que C no está orientado a objetos como podría estarlo C++. Decirte que lo que sí puedes hacer es crear un <struct> en C++ y entonces si puedes declarar una función miembro del <struct>. Pero tienes algunos errores como inicializar la variable y luego tu función no tiene sentido, devuelve un <int> y no tiene ningún <return>... Te dejo el siguiente código que compilado como un fuente de C++ sí funciona (g++ test.cpp -o test). Si lo tratas como un fuente C, no va a funcionar (gcc test.c -o test). #include <stdio.h> // #include <cstdio> para C++ mejor struct foo{ int x; int sumar(int y){ return x+y; } }; int main(){ foo my_foo; my_foo.x = 3; printf("%d\n", my_foo.x); // salida: 3 int suma = my_foo.sumar(5); printf("%d\n", suma); // salida: 8 }
No sé si te sirve
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
huchoko
|
Creo que puramente en C no se puede ya que C no está orientado a objetos como podría estarlo C++. Decirte que lo que sí puedes hacer es crear un <struct> en C++ y entonces si puedes declarar una función miembro del <struct>. Pero tienes algunos errores como inicializar la variable y luego tu función no tiene sentido, devuelve un <int> y no tiene ningún <return>... Te dejo el siguiente código que compilado como un fuente de C++ sí funciona (g++ test.cpp -o test). Si lo tratas como un fuente C, no va a funcionar (gcc test.c -o test). #include <stdio.h> // #include <cstdio> para C++ mejor struct foo{ int x; int sumar(int y){ return x+y; } }; int main(){ foo my_foo; my_foo.x = 3; printf("%d\n", my_foo.x); // salida: 3 int suma = my_foo.sumar(5); printf("%d\n", suma); // salida: 8 }
No sé si te sirve Ah, que pena , pero talvez me sirva cuando este programando en C++ Gracias
|
|
|
En línea
|
|
|
|
K-YreX
|
Siempre puedes usar una función externa : // declaracion de la struct int sumar(struct foo my_foo, int y){ return my_foo.x + y; } int main(){ struct foo my_foo; my_foo.x = 2; int suma = sumar(my_foo, 8); // suma = 10 }
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Loretz
Desconectado
Mensajes: 117
|
En C (y en C++) una struct puede tener un "puntero a función" como miembro, que no es lo mismo que una "función miembro" por supuesto, pero es la forma que puede usarse en C para asociar comportamiento a una struct. Va un ejemplo: #include <stdio.h>
struct foo { int bar; int(*pfun)(int, int); // puntero a función que devuelve int y que toma dos ints como parámetros. };
int sumar(int x, int y) { return x + y; }
int multiplicar(int x, int y) { return x * y; }
int main() { struct foo asd; asd.bar = 3; asd.pfun = &sumar;
printf("suma = %i\n", asd.pfun(5, 5));
asd.pfun = &multiplicar; printf("producto = %i\n", asd.pfun(5, 5));
return 0; }
|
|
|
En línea
|
|
|
|
CalgaryCorpus
|
Para complementar la excelente respuesta de Loretz, los nombres de las funciones funcionan como punteros inicializados y cuyo contenido es la direccion de memoria de esa funcion, por lo que el uso del & es opcional. asd.pfun = &sumar; // tambien puede escribirse sin & asd.pfun = sumar;
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda C Struct y función.
Programación C/C++
|
tvirus
|
6
|
6,302
|
19 Octubre 2010, 23:02 pm
por tvirus
|
|
|
como agrego una funcion en struct o como executo una funcion con CreateRemoteT?
Programación C/C++
|
Belial & Grimoire
|
3
|
3,367
|
28 Agosto 2011, 22:27 pm
por Eternal Idol
|
|
|
Funcion que no puede retornar un struct [C]
Programación C/C++
|
milx86
|
2
|
4,395
|
11 Octubre 2014, 03:39 am
por milx86
|
|
|
Duda con funcion que devuelve un struct
Programación C/C++
|
Naimaderis
|
1
|
2,769
|
15 Julio 2017, 21:43 pm
por engel lex
|
|
|
Ayuda con función y struct, socorro
Programación C/C++
|
laurinhabig0
|
1
|
2,100
|
10 Noviembre 2017, 12:39 pm
por Gallu
|
|