Problema con GTK y C

Iniciado por erikcmauricio, 27 Julio 2017, 01:16 AM

0 Miembros y 2 Visitantes están viendo este tema.

erikcmauricio

#10
Ya probé y funciona..... pero al compilar debo agregar el venta.c para que funcione...... se supone que al incluir el .h en venta.c y ventana.c debería invocarlo......

Si.... buscaré la diferencia entre char y puntero char*..... gracias

Por si le sirve a alguien.....

venta.c
#include "venta.h"
char* letras(void)
{
return "Hoy es un gran dia";
}

venta.h
#ifndef VENTA_H_INCLUDED
#define VENTA_H_INCLUDED

char* letras(void);

#endif

ventana.c (este es el .c principal)
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include "venta.h"

//extern char letras();

GtkWidget *label;
GtkWidget *button;
GtkWidget *button2;
GtkWidget *button3;
GtkWidget *button4;
GtkWidget *texto;

GtkWidget *labelMsg;
GtkWidget *buttonMsg;

GtkWidget *form_msg;
/*char letras(void)
{
//return("Eres un playo");
char textFunc[] = "pulga h";
return(textFunc);
}*/

void texto_label(void)
{
//char text[] = letras();
//text = letras();
//gchar b;
//b = text;
//b=text;

//char b[] = letras();
//text = letras(void);
//text == "pulga";
//gtk_label_set_text(GTK_LABEL(label), "Hola guineo plátano");
//gtk_label_set_text(GTK_LABEL(label), letras());// cierra la ventana
//gtk_label_set_text(GTK_LABEL(label), letras(void));//error

//da error.... dice que letras no definido
//gtk_label_set_text(GTK_LABEL(label), letras());

char* text;
text = letras();
gtk_label_set_text(GTK_LABEL(label), text);


}

int main(int argc, char *argv[])
{
GtkBuilder *gtkBuilder;
GtkWidget *window;

gtk_init(&argc, &argv);

gtkBuilder = gtk_builder_new();

gtk_builder_add_from_file(gtkBuilder, "ventana.glade", NULL);

window = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "ventana1"));

label = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "label1"));

button = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "Boton1"));
button2 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "Boton2"));
button3 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "Boton3"));
button4 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "Boton4"));

//gtk_window_set_title(GTK_WINDOW(window), "Establece título.....");

g_signal_connect(GTK_OBJECT(button2),"clicked",G_CALLBACK(texto_label),NULL);

g_object_unref(G_OBJECT(gtkBuilder));
gtk_widget_show(window);

gtk_main();

return 0;
}




[MOD] Usar etiquetas GeSHi, para publicar codigo.




Si lo compilo de esta manera.... dice lo siguiente.... se supone que debería incluir venta.c... pero no lo hace.....

root@erikc-Aspire-4560:/home/erikc/Documentos/ventana-2# gcc -Wall -g -o ventana ventana.c `pkg-config --cflags --libs gtk+-2.0` -export-dynamic
In file included from ventana.c:4:0:
venta.h:12:7: warning: extra tokens at end of #endif directive
#endif
       ^
/tmp/cc9fBUWP.o: En la función `texto_label':
/home/erikc/Documentos/ventana-2/ventana.c:45: referencia a `letras' sin definir
collect2: error: ld returned 1 exit status

Si lo incluyo manualmente.... funciona.....

root@erikc-Aspire-4560:/home/erikc/Documentos/ventana-2# gcc -Wall -g -o ventana ventana.c venta.c `pkg-config --cflags --libs gtk+-2.0` -export-dynamic
In file included from ventana.c:4:0:
venta.h:12:7: warning: extra tokens at end of #endif directive
#endif
       ^
In file included from venta.c:1:0:
venta.h:12:7: warning: extra tokens at end of #endif directive
#endif

[MOD] No efectuar doble post, se usa botón "modificar" para añadir comentarios.

simorg

@erikcmauricio

Hola, se ruega leer las Reglas del Foro.

No se hace doble post, se usa "modificar" para añadir comentarios.

Para publicar codigo es imprescindible usar las etiquetas GeSHi.


Tenlo presemte. Yá te he modificado demasiadas cosas.

En mi firma tienes las Reglas.


Saludos.

ivancea96

Dentro de ventana.c tienes un include de venta.h. venta.h no tiene ninguna vinculación a venta.c. Al hacer ese include, lo único que hace es "copiar el código de venta.h e incrustarlo donde tenías el include". Es decir, lo único que logras es que "exista" la función letras, por lo cual la puedes usar sin problemas, pero NO existe su definición (la que está dentro de venta.c).

Este error:
referencia a `letras' sin definir
Estás suando letras(), pero no encuentra su definición, así que te da el error.
Su definición está en venta.c.