PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : KDE/QT file mit Q_OBJECT keine lokalen variablen sichtbar



microdigi
22-09-2002, 15:41
schade,
wenn ich das schluesselwort
Q_OBJECT
in die *.h file einfuege,
kann ich (auch im debugger nicht) die lokal (sowohl private: als auch public: )
definierten variablen nicht sehen und auch nicht darauf zugreifen.
weder der compiler noch das run-time meckern aber.
definitiv werden diese variablen dennoch nicht gesehen.
ok, ich habe da eine structure name_tag{..;...;...; } name; definiert,
aber auch die sehe ich ueberhaupt nicht.
ist das ein fehler im compiler/linker?

ich habe mir jetzt geholfen, indem ich das Q_OBJECT entfernt habe,
aber dann kann ich mir die signals&slots hierbei natuerlich von der backe streichen,
was allerdings nicht tragisch waere. die hab ich sowieso in einer separaten file
untergebracht, und von dort aus gehts dann an die einfachen methoden mit parametern.

fuer aufklaerung dankbar zeigt sich
digi :)

anda_skoa
22-09-2002, 16:00
:confused:

Was bedeutet, du kannst nicht drauf zugreifen?
Kannst du vielleicht den Header, der das Problem hat, posten?

Ciao,
_

microdigi
22-09-2002, 17:33
mach ich doch glatt, anda_skoa.
welch name!

also vier files im anhang:
setup.*

habe sie mit tar cvfp unaccess setup.cpp setup.cppp setup.h setup.hh

gebaut,
demnach mit tar xvfp unaccess
auspacken.

also, ich sehe das buendel (die structure) dieser variablen
su_array.XXXX nicht, auch die structure als solche nicht.
weder beim debug-stop, noch werden sie beim lauf ausgewertet.
ich sehe aus dieser gesamten class nichts, sieht so aus als wenn die
class ueberhaupt nicht da ist. strange... :confused:

aber mach dir keinen grossen kopp.
es geht ja, ich habs umschifft.
vielleicht nur interessant als evtl bug.

gruss - digi

sachma: du musst wirklich auf dem net sitzen....

anda_skoa
22-09-2002, 18:42
Hmm, ich kann keine Fehler finden.

Ich hab mal ein kleines Testprogramm erstelt, dass auch eine struct in einer Klasse deklariert.

Funktioniert soweit ich das sehen kann.

Ausgabe sieht so aus
#> ./test
a=0
b=1
c=2
a=2
b=1
c=1

a und b sind Variablen in der struct, c in der Klasse selbst
in doSomething() mache ich
a = c
c = b

Der Output stimmt damit überein.

Vielleicht macht eines der vielen macros etwas, was sich mit dem Q_OBJECT Macro nicht verträgt,

Ciao,
_

microdigi
22-09-2002, 18:53
nun ja, wie gesagt, anda_skoa, ich habs einfach umschifft.
merke: gibt stets mehr als eine loesung. :D
die macros sind sicher nicht die ursache, die sind dazu ZU simpel.
vielleicht entferne ich die class noch mal 'von der disk' und lege sie
dann mit Q_OBJECT nochmal neu an...
dann geb ich dir bescheid.
wird aber wohl'n bisschen tage dauern.
wenigstens hab ich jetzt einen superschnellen rechenknecht.
und da muss ich nicht mehr 15 minuten++ auf das ergebnis warten.
der machts in rund 30 sekunden.
keine zeit mehr in der nase zu bohren :D

danke fuer die muehe, die du dir gemacht hast.

soll ich dir mal die gepackte komplett-version schicken?
vielleicht kannst du daraus was lernen ...? :cool:

aloha - digi

microdigi
25-09-2002, 20:00
ich habs jetzt nochmal beobachtet:
sobald das keyword Q_OBJECT in der *.header auftaucht,
komm ich nicht mehr an die lokalen variablen in dieser klasse ran. :(
macht nichts, ich habs dann anders geloest.
EINE einzige class mit Q_OBJECT (die bedient dann die slots), und von
dort aus gehts in die 'normalen' classes.
allerdings braucht man dazu dann globale instanzen-pointer,
um an diese classes zu kommen. auch nicht schlimm.
dennoch gehts etwas an der oop vorbei.

kann ich mit leben.

danke fuer die hilfe(n).
ich poste das hier nur zur kenntnis.

aloha - digi

anda_skoa
25-09-2002, 22:27
Original geschrieben von microdigi
ich habs jetzt nochmal beobachtet:
sobald das keyword Q_OBJECT in der *.header auftaucht,
komm ich nicht mehr an die lokalen variablen in dieser klasse ran. :(


Schade, dass es nicht klappt. Ist das erste Mal, dass ich davon gehört/gelesen habe.
Wenigsten kenn ich jetzt einen Lösungsansatz, falls es doch mal passiert.



macht nichts, ich habs dann anders geloest.
EINE einzige class mit Q_OBJECT (die bedient dann die slots), und von
dort aus gehts in die 'normalen' classes.
allerdings braucht man dazu dann globale instanzen-pointer,
um an diese classes zu kommen. auch nicht schlimm.
dennoch gehts etwas an der oop vorbei.


Wenns von diesen Klassen nur eine Instanz gibt -> Singleton Pattern



class MySingleton {
public:
static MySingleton* instance() {
if (m_instance == 0)
m_instance = new MySingleton();
return m_instance;
};

private:
static MySingleton* m_instance;

MySingleton();
~MySingleton();
};

MySingleton* MySingleton::m_instance = 0;


Ciao,
_

microdigi
26-09-2002, 08:57
ganz sicher bleibe ich hier am ball.
denn die sache wird mich noch eine weile verfolgen.
und irgendwann finde ich den 'bosewicht'.

gruss & danke fuer ideen und hilfe
sagt digi