Seite 1 von 1

nachträglich eingefügtes struct klappt nicht

Verfasst: 18. Mai 2010 22:59
von Qiui
Abend zusammen,

ich hab folgendes Problem und hoffe einer von euch kann mir da weiter helfen.

Nachdem ich ein nachträglich eingefügtes struct

Code: Alles auswählen

struct convert {
        int port;
        int pin;
        int nr;
        int zustand;
        int wert;
    };
extern struct convert werte;
nutzen möchte, bekomme ich folgende Fehlermeldung:

Code: Alles auswählen

E:/qt_test/compiler/debug/emitter.o:-1: error: In function `Z7emitteri11tokenValues':
E:/qt_test/compiler/emitter.cpp:57: undefined reference to `werte'
:-1: error: collect2: ld returned 1 exit status
Was ich nicht verstehe, wenn ich den gewünchten Wert statt an das struct

Code: Alles auswählen

werte.pin = tVal.Value;
an eine int variable

Code: Alles auswählen

test = tVal.Value;
übergebe, läuft es.

Ich hab bereits folgendes versucht, jedoch ohne Erfolg: clean all, run qmake, rebuild.

Würd mich freuen wenn mir jemand weiterhelfen könnte - danke im vorraus.

LG

Verfasst: 18. Mai 2010 23:18
von kater
Mehr Code. Du hast das extern falsch genutzt. Wahrscheinlich ist es aber garnicht nötig.
Was willst du genau erreichen?

Verfasst: 18. Mai 2010 23:40
von Qiui
Danke für die schnelle Antwort.

Die Definition meiner Variablen sind global abgelegt - keine feine Art, ist leider nicht anders realisierbar.

Code: Alles auswählen

struct convert {
        int port;
        int pin;
        int nr;
        int zustand;
        int wert;
    };
extern struct convert werte;

...

struct tokenValues{
       int Value;
       int Value2;
};

extern struct tokenValues tokenVal;   // Wert des Symbolattributs

...
-> befindet sich global.h

aufgerufen wird es wie folgt: in emitter.cpp

Code: Alles auswählen

void emitter(int tok, tokenValues tVal)
{
...
case  PINID:
        cout << "ID (PIN) SymbolTabelle: " << "     " << symTable[tVal.Value].lexptr << "     " << (char)tVal.Value << "     " << tVal.Value2 << endl;
        //test = tVal.Value;
        werte.pin = tVal.Value;
        werte.nr = tVal.Value2;
...
}

Der Sinn dahinter: ich möchte die Werte Value und Value2 abfangen, um sie an eine Funktion zu übergeben (Funktion befindet sich in converter.cpp).

Ich hoffe ich hab mich verständlich ausgedrück und die kleinen Schnipsel reichen aus.

LG

Verfasst: 18. Mai 2010 23:58
von Qiui
Ich glaub, ich hab das Probelm gefunden - deine Anmerkung mit dem falsch genutzen "extern" hat den Anstoß gegeben :D - danke nochmal.

Verfasst: 19. Mai 2010 00:10
von kater
extern sagt ja nur, dass es diese Variable irgendwo ganz ganz ganz sicher mal gibt. Also musst du sie irgendwo auch anlegen und das hast du nicht gemacht. Drum der Linkerfehler.
Und es geht immer anders. Mehr Objektorientiert eben. Erstelle ein Objekt, eine neue Klasse, mit deinen Struct Variablen drinne und gibt das immer mit. Das ist zwar auch nicht schöner, da man immer die Variable mitschleppen muss, aber sie sind nicht mehr global.