Gaute91 Skrevet 27. august 2008 Del Skrevet 27. august 2008 (endret) Jeg får den feilmeldingen når jeg prøver å bygge noen et sett med filer i C/C++... Her er de berørte filene: Klikk for å se/fjerne innholdet nedenfor //main.cpp #include <iostream> #include <gtk/gtk.h> #include "interface.h" using namespace std; int main (int argc, char *argv[]) { if ( gui ( argc, *argv[] ) == 0) // Feilen oppstår her... { cout<< "Failed!"; } } Klikk for å se/fjerne innholdet nedenfor //interface.h #ifndef INTERFACE_H_INCLUDED #define INTERFACE_H_INCLUDED GtkWidget* widget_liste (void); int gui ( int argc, char *argv[] ); #endif // INTERFACE_H_INCLUDED Klikk for å se/fjerne innholdet nedenfor //interface.c #include <gtk/gtk.h> #include "interface.h" #include "callback.h" int gui ( int argc, char *argv[] ) { GtkBuilder *builder; GtkWidget *oversikt; gtk_init (&argc, &argv); builder = gtk_builder_new (); gtk_builder_add_from_file (builder, "gtk.ui", NULL); oversikt = GTK_WIDGET (gtk_builder_get_object (builder, "oversikt")); gtk_builder_connect_signals (builder, NULL); g_object_unref (G_OBJECT (builder)); gtk_widget_show (oversikt); gtk_main (); return 0; } GtkWidget* widget_liste (void) { GtkBuilder *builder; GtkWidget *liste; builder = gtk_builder_new (); gtk_builder_add_from_file (builder, "gtk.ui", NULL); liste = GTK_WIDGET (gtk_builder_get_object (builder, "liste")); return liste; } Feilmeldingen er error: expected primary-expression before ‘]’ token Håper noen kan hjelpe meg Hilsen Gaute Endret 28. august 2008 av Gaute91 Lenke til kommentar
GeirGrusom Skrevet 27. august 2008 Del Skrevet 27. august 2008 if ( gui ( argc, *argv[] ) == 0) // Feilen oppstår her.. Det er fordi dette er feil. du skal bare skrive gui(argc, argv) Lenke til kommentar
Gaute91 Skrevet 27. august 2008 Forfatter Del Skrevet 27. august 2008 takk for svar, men nå får jeg denne feilmeldingen, fra samme stedet undefined reference to `gui(int, char**)' Lenke til kommentar
Dead_Rabbit Skrevet 27. august 2008 Del Skrevet 27. august 2008 Linkeren finner ikke funksjonen gui(int, char**). Den ser ikke at den er definert. Du må enten definere den, eller linke med de rette bibliotekene. Lenke til kommentar
Gaute91 Skrevet 27. august 2008 Forfatter Del Skrevet 27. august 2008 den er jo definert i interface.h int gui ( int argc, char *argv[] ); og den er linket inn i main.cpp #include "interface.h" Lenke til kommentar
GeirGrusom Skrevet 27. august 2008 Del Skrevet 27. august 2008 Kompilerer du interface.c også? eller bare main.c? Lenke til kommentar
Gaute91 Skrevet 27. august 2008 Forfatter Del Skrevet 27. august 2008 (endret) Jeg kompilerer alt sammen... Linkingen funker alle andre steder i prosjektet... Endret 27. august 2008 av Gaute91 Lenke til kommentar
GeirGrusom Skrevet 27. august 2008 Del Skrevet 27. august 2008 Vel, feilmeldingen sier at funksjonen ikke er definert. Så lenge syntaksen din er korrekt når du kaller funksjonen, så burde dette kompilere. Det kan være at du har skrevet noe tull som gjør at den ikke finner riktig overloaded funksjon. I motsetning til vanlig C, så kan en ha flere funksjoner med samme navn i C++ så dersom du gir feil datatype i parameterne så vil den lete etter en annen funksjon, og kan si at funksjonen ikke er definert, selv om den er det. Sjekk at syntaksen din er riktig, eventuelt post koden på nytt etter at du har rettet den opp. Lenke til kommentar
Dead_Rabbit Skrevet 27. august 2008 Del Skrevet 27. august 2008 (endret) den er jo definert i interface.h int gui ( int argc, char *argv[] ); og den er linket inn i main.cpp #include "interface.h" Neks. Dette er ikke linking, det er inkludering av header-filer. Header-filer bør bare inneholde deklarasjoner, så hvis du ikke eksplisitt kompilerer med kildefilen også, får du undefined reference. Edit: Hvis jeg hadde kompilert dette (påLinux boksen min), ville jeg gjort noe slikt som: $ g++ main.cpp interface.cpp -o program Endret 27. august 2008 av staalezh Lenke til kommentar
Gaute91 Skrevet 27. august 2008 Forfatter Del Skrevet 27. august 2008 Klikk for å se/fjerne innholdet nedenfor //main.cpp #include <iostream> #include <gtk/gtk.h> #include "interface.h" using namespace std; int main (int argc, char *argv[]) { gui(argc, argv); } } Klikk for å se/fjerne innholdet nedenfor //interface.h #ifndef INTERFACE_H_INCLUDED #define INTERFACE_H_INCLUDED GtkWidget* widget_liste (void); int gui (int argc, char *argv[]); #endif // INTERFACE_H_INCLUDED Klikk for å se/fjerne innholdet nedenfor //interface.c #include <gtk/gtk.h> #include "interface.h" #include "callback.h" #include "mysql_eng.hpp" #define BUILDER_XML_FILE "xml.ui" int gui (int argc, char *argv[]) { GtkBuilder *builder; GtkWidget *oversikt; gtk_init (&argc, &argv); builder = gtk_builder_new (); gtk_builder_add_from_file (builder, BUILDER_XML_FILE, NULL); oversikt = GTK_WIDGET (gtk_builder_get_object (builder, "oversikt")); gtk_builder_connect_signals (builder, NULL); g_object_unref (G_OBJECT (builder)); gtk_widget_show (oversikt); gtk_main (); return 0; } GtkWidget* widget_liste (void) { GtkBuilder *builder; GtkWidget *liste; builder = gtk_builder_new (); gtk_builder_add_from_file (builder, BUILDER_XML_FILE, NULL); liste = GTK_WIDGET (gtk_builder_get_object (builder, "liste")); return liste; } Feilmeldingen er fortsatt undefined reference to `gui(int, char**)' Jeg kombinerer c++ og c filer, leste et sted at man kunne gjøre det sånn... eller er det der feilen ligger? Gaute Lenke til kommentar
Dead_Rabbit Skrevet 27. august 2008 Del Skrevet 27. august 2008 Du kan prøve: extern "C" int gui (int argc, char *argv[]); ... og extern "C" int gui (int argc, char *argv[]) { // .... } Kanskje du må endre endelsen til .cpp/.hpp også.. litt usikker på detaljene her. Lenke til kommentar
Gaute91 Skrevet 27. august 2008 Forfatter Del Skrevet 27. august 2008 main.cpp er c++ fil, mens interface.c og interface.h (+noen flere) er c filer, fordi c++ ikke kan bruke xml filene fra glade 3... skal jeg endre noen av endelsene likevell? takk for svar Lenke til kommentar
Dead_Rabbit Skrevet 28. august 2008 Del Skrevet 28. august 2008 .. Sjekka du om det funka med extern da? Lenke til kommentar
Gaute91 Skrevet 28. august 2008 Forfatter Del Skrevet 28. august 2008 funket ikke, har jeg skjønt det riktig når det skal se sånn ut?: Klikk for å se/fjerne innholdet nedenfor //main.cpp // #include <iostream> #include <gtk/gtk.h> #include "interface.h" // using namespace std; int main (int argc, char *argv[]) { gui(argc, argv); } Klikk for å se/fjerne innholdet nedenfor //interface.h #ifndef INTERFACE_H_INCLUDED #define INTERFACE_H_INCLUDED GtkWidget* widget_liste (void); extern "C" int gui (int argc, char *argv[]); // Feilen er her! #endif // INTERFACE_H_INCLUDED Klikk for å se/fjerne innholdet nedenfor //interface.c #include <gtk/gtk.h> #include "interface.h" #include "callback.h" #include "mysql_eng.hpp" #define BUILDER_XML_FILE "branch/v0_1_X/gtk.ui" extern "C" int gui (int argc, char *argv[]) { GtkBuilder *builder; GtkWidget *oversikt; gtk_init (&argc, &argv); builder = gtk_builder_new (); gtk_builder_add_from_file (builder, BUILDER_XML_FILE, NULL); oversikt = GTK_WIDGET (gtk_builder_get_object (builder, "oversikt")); gtk_builder_connect_signals (builder, NULL); g_object_unref (G_OBJECT (builder)); gtk_widget_show (oversikt); gtk_main (); return 0; } GtkWidget* widget_liste (void) { GtkBuilder *builder; GtkWidget *liste; builder = gtk_builder_new (); gtk_builder_add_from_file (builder, BUILDER_XML_FILE, NULL); liste = GTK_WIDGET (gtk_builder_get_object (builder, "liste")); return liste; } Feilmeldingen er error: expected identifier or ‘(’ before string constant Gaute Lenke til kommentar
Gaute91 Skrevet 28. august 2008 Forfatter Del Skrevet 28. august 2008 Nå har jeg fått det til... jeg måtte bare legge en extern "C" {...} rundt include saken i main.cpp for alle headerne som hører til c filer... Takk for all hjelp Gaute Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå