Gaute91 Skrevet 27. august 2008 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
GeirGrusom Skrevet 27. august 2008 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)
Gaute91 Skrevet 27. august 2008 Forfatter Skrevet 27. august 2008 takk for svar, men nå får jeg denne feilmeldingen, fra samme stedet undefined reference to `gui(int, char**)'
Dead_Rabbit Skrevet 27. august 2008 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.
Gaute91 Skrevet 27. august 2008 Forfatter 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"
GeirGrusom Skrevet 27. august 2008 Skrevet 27. august 2008 Kompilerer du interface.c også? eller bare main.c?
Gaute91 Skrevet 27. august 2008 Forfatter Skrevet 27. august 2008 (endret) Jeg kompilerer alt sammen... Linkingen funker alle andre steder i prosjektet... Endret 27. august 2008 av Gaute91
GeirGrusom Skrevet 27. august 2008 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.
Dead_Rabbit Skrevet 27. august 2008 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
Gaute91 Skrevet 27. august 2008 Forfatter 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
Dead_Rabbit Skrevet 27. august 2008 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.
Gaute91 Skrevet 27. august 2008 Forfatter 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
Gaute91 Skrevet 28. august 2008 Forfatter 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
Gaute91 Skrevet 28. august 2008 Forfatter 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
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å