ein "einfaches" Problem mit Membervariablen
-
Hello!
Ich habe
in "SelbstTest.h"class CSelbstTestDlg : public CDialog { // Konstruktion public: static UINT Testing(LPVOID pParam); // Dialogfelddaten //{{AFX_DATA(CSelbstTestDlg) enum { IDD = IDD_SELBSTTEST }; CButton [u]m_checkDriver[/u]; //}}AFX_DATAin "SelbsTest.cpp"
void CSelbstTestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSelbstTestDlg) DDX_Control(pDX, IDC_CHECK_TREIBER, m_checkDriver); //}}AFX_DATA_MAP } ... UINT CSelbstTestDlg::Testing(LPVOID pParam) { CSmartScanner Scanner; USHORT DriverVer; Scanner.GetDriverVersion(&DriverVer); if (DriverVer == 512) --> [u]m_checkDriver[/u].SetCheck(1); Scanner.Open(); return 0; }Scheint alles richtig zu sein, aber beim Kompilieren kommt:
error C2228: Der linke Teil von '.SetCheck' muss eine Klasse/Struktur/Union seinWoran liegt es denn

-
Da gibts bestimmt noch mehr fehler wie diesen einen !?
-
nein, wieso?
Aber ich hab rausgefunden, dass die "static" Methoden dürfen nicht auf Membervariablen zugreifen. Jetzt ist halt die Frage, wie greife ich auf meine Membervariable zu?
Eigentlich benutze ich einen Thread
BOOL CSelbstTestDlg::OnInitDialog() { CDialog::OnInitDialog(); m_Flag = 1; // =1 um Thread zu starten, =0 zu stopen CWinThread* testing = AfxBeginThread ([b]Testing[/b], &m_Flag); return TRUE; }Die Methode Testing ist ja oben beschrieben. Sie muss wegen dem Thread "static" sein. Da möchte ich auf einen meiner Dialoge zugreifen. Die m_checkDriver ist eine Membervariable in diesem Dialog.
Fals jemand Idee hat, bin ich ihm serh dankbar.
-
hier n dirty hack (klappt nur wenn du nur eine instanz benutzt und is eigentlich nich schön... bei dialogfenstern isses aber ganz praktisch)
//blah.h class blah { public: blah(); private: static blah* currentinstance; static void func(); long mVal; }; //blah.cpp blah* blah::currentinstance=0; blah::blah() { currentinstance=this; } void blah::func() { currentinstance->mVal=0; }
-
nicht schlecht

bei mir kommt aber
private: static blah* currentinstance;error C2143: Syntaxfehler : Fehlendes ';' vor '*'
-
versuchs mit
public: CButton m_checkDriver;
-
Hi,
übergebe die Instanz der Dialogklasse über pParam an deinen Thread.
Grüße...
-
Reticent schrieb:
nicht schlecht

bei mir kommt aber
private: static blah* currentinstance;error C2143: Syntaxfehler : Fehlendes ';' vor '*'
hab den code grad 1:1 bei mir reinkopiert und er funktioniert
-
Sovok schrieb:
hab den code grad 1:1 bei mir reinkopiert und er funktioniert
seltsam... Ich meine, ich glaub dir. Mich wundert, dass es bei mir net geht.
Schade
jetzt werde ich es durch OnTimer() lösen.
-
Reticent schrieb:
seltsam... Ich meine, ich glaub dir. Mich wundert, dass es bei mir net geht.
Schade
Dir ist schon klar, dass du da etwas anpassen musst, wenn deine Klasse nicht blah heißt?
-

heh
hab vorher nicht alles angepasst. Code läuft. Danke.