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_DATA
    

    in "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 sein

    Woran 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.


Anmelden zum Antworten