Gå til innhold

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


Anbefalte innlegg

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
Lenke til kommentar
Videoannonse
Annonse

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
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
Lenke til kommentar

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

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

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å
×
×
  • Opprett ny...