Gå til innhold

[Løst] error: expected primary-expression before ‘]’ token


Anbefalte innlegg

Skrevet (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 av Gaute91
Videoannonse
Annonse
Skrevet

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.

Skrevet (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 av staalezh
Skrevet

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

Skrevet

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.

Skrevet

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 :)

Skrevet

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

Skrevet

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...