Anfängerfrage



  • @Panschev genau, das ist mein Problem, ich habe dies schon probiert, nur wird bei der Überprüfung der Platten auf Variablen zugegriffen, die erst im Fenster erstellt werden, jetzt müsste ich die Funktion ja außerhalb des Fenstercodes schreiben und dann kennt er die Variablen nicht...



  • Welcher Fenster-Code.
    Dieser Code ist die Klasse für den Dialog.
    Wenn du in dieser Klasse Variablen definierst und auch eine Funktion hast dann kann diese Funktion auf die Variablen zugreifen.
    IMHO hast du ein Problem mit den Grundlagen der Programmierung.



  • Es ist so wie Unix-Tom geschrieben hat. Zur Zeit erstellst du deine Variablen lokal welche beim Schliessen deines Dialogs(Fenster) nicht mehr vorhanden sind. Erstelle die Variablen für deine Klasse, somit kannst du auch immer auf sie zugreifen



  • @panschev ja, genau das ist das Problem was ich meine, die Variablen sind lokal erstellt ( innherhalb des Fensters ) ...

    Also, das ist der Grundaufbau ( extrem verkürzt ) :

    // vawsDlg.cpp : Implementierungsdatei
    //
    #include "fmod.h"
    #include ...
    int m_iCount = 0;
    int protokoll(CString szBuffer);
    int ip_aus();
    int hdd_ein();
    bool geloescht=false;
    /////////////////////////////////////////////////////////////////////////////
    // CAboutDlg-Dialogfeld für Anwendungsbefehl "Info"
    
    class CAboutDlg : public CDialog
    {
    public:
    	CAboutDlg();
    
    // Dialogfelddaten
    	//{{AFX_DATA(CAboutDlg)
    	enum { IDD = IDD_ABOUTBOX };
    	//}}AFX_DATA
    
    	// Vom Klassenassistenten generierte Überladungen virtueller Funktionen
    	//{{AFX_VIRTUAL(CAboutDlg)
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
    	//}}AFX_VIRTUAL
    
    // Implementierung
    protected:
    	//{{AFX_MSG(CAboutDlg)
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
    	//{{AFX_DATA_INIT(CAboutDlg)
    	//}}AFX_DATA_INIT
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CAboutDlg)
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    	//{{AFX_MSG_MAP(CAboutDlg)
    		// Keine Nachrichten-Handler
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CVawsDlg Dialogfeld
    
    CVawsDlg::CVawsDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CVawsDlg::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CVawsDlg)
    	m_netzwerkstatus = _T("");
    	m_InetStat = _T("");
    	m_HDDname = _T("");
    	m_HDDpro = 0;
    	m_HDD = 0;
    	m_HDDname2 = _T("");
    	m_HDDname4 = _T("");
    	m_HDDname3 = _T("");
    	m_HDD2 = 0;
    	m_HDD3 = 0;
    	m_HDD4 = 0;
    	m_HDDpro2 = 0;
    	m_HDDpro3 = 0;
    	m_HDDpro4 = 0;
    	m_WARNING = _T("");
    	m_sTime = _T("");
    	m_sCount = _T("");
    	//}}AFX_DATA_INIT
    	// Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CVawsDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CVawsDlg)
    	DDX_Control(pDX, IDC_PROGRESS1, m_progress);
    	DDX_Text(pDX, IDC_NetzStatus, m_netzwerkstatus);
    	DDX_Text(pDX, IDC_InetStat, m_InetStat);
    	DDX_Text(pDX, IDC_PCstat, m_HDDname);
    	DDX_Text(pDX, IDC_HDDPro, m_HDDpro);
    	DDX_Text(pDX, IDC_Hdd, m_HDD);
    	DDX_Text(pDX, IDC_EDIT4, m_HDDname2);
    	DDX_Text(pDX, IDC_EDIT6, m_HDDname4);
    	DDX_Text(pDX, IDC_EDIT5, m_HDDname3);
    	DDX_Text(pDX, IDC_HDD2, m_HDD2);
    	DDX_Text(pDX, IDC_HDD3, m_HDD3);
    	DDX_Text(pDX, IDC_HDD4, m_HDD4);
    	DDX_Text(pDX, IDC_HDDpro2, m_HDDpro2);
    	DDX_Text(pDX, IDC_HDDpro3, m_HDDpro3);
    	DDX_Text(pDX, IDC_HDDpro4, m_HDDpro4);
    	DDX_Text(pDX, IDC_WARNING, m_WARNING);
    	DDX_Text(pDX, IDC_STATICTIME, m_sTime);
    	DDX_Text(pDX, IDC_STATICCOUNT, m_sCount);
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CVawsDlg, CDialog)
    	//{{AFX_MSG_MAP(CVawsDlg)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	ON_COMMAND(ID__ABOUT, OnAbout)
    	ON_BN_CLICKED(IDC_Start, OnStart)
    	ON_COMMAND(ID_DATEI_BEENDEN, OnDateiBeenden)
    	ON_COMMAND(ID_PROTOKOLL_NEU, OnProtokollNeu)
    	ON_COMMAND(ID_OPTIONEN_EINSTELLUNGEN, OnOptionenEinstellungen)
    	ON_WM_TIMER()
    	ON_COMMAND(ID_INFORMATIONEN_PC, OnInformationenPc)
    	ON_BN_CLICKED(IDC_BEREINIGEN, OnBereinigen)
    	ON_BN_CLICKED(IDC_Browser, OnBrowser)
    	ON_COMMAND(ID_OPTIONEN_PROGRAMMPFADE, OnOptionenProgrammpfade)
    	ON_BN_CLICKED(IDC_Mail_open, OnMailopen)
    	ON_BN_CLICKED(IDC_MediaPl, OnMediaPl)
    	ON_BN_CLICKED(IDC_Explorer, OnExplorer)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CVawsDlg Nachrichten-Handler
    
    BOOL CVawsDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    	// Hinzufügen des Menübefehls "Info..." zum Systemmenü.
    
    	// IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{	
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
    	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
    	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
    	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden
    //---------------------Bei Prog Start -------------------------------------------------	
    	// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    	//Variablen erstellen
    
    	//X Deaktivieren--------------------
    	CMenu* HandleToSystemMenu = this->GetSystemMenu(FALSE);
        HandleToSystemMenu->EnableMenuItem( SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);
    
    	//Timer ---------------------
    	// ... hier ist dann der Code von Timer, dem HDD zugriff usw...
    
    // Wollen Sie Ihrem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie 
    //  den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das 
    //  Dokument/Ansicht-Modell verwenden, wird dies automatisch für Sie erledigt.
    
    void CVawsDlg::OnPaint() 
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // Gerätekontext für Zeichnen
    
    		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
    
    		// Symbol in Client-Rechteck zentrieren
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// Symbol zeichnen
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialog::OnPaint();
    	}
    }
    
    // Die Systemaufrufe fragen den Cursorform ab, die angezeigt werden soll, während der Benutzer
    //  das zum Symbol verkleinerte Fenster mit der Maus zieht.
    HCURSOR CVawsDlg::OnQueryDragIcon()
    {
    	return (HCURSOR) m_hIcon;
    }
    //-------------------Buttons und co
    //hier folgen jetzt die Behandlung von buttons , usw ..
    

    und jetzt ist mein einzigstes Problem, dass ich auf die Variabeln m_HDD2 = 0;
    und m_HDD3 = 0; usw. zugreiffen will, die aber local erstellt sind...
    Das man das über funktionen lösen kann, auf die idee bin ich auch schon gekommen aber ich kann wie gesagt auf die Vars nicht zugreifen (logischerweise) nur wie kann ich diese Variablen global erstellen ?



  • Auf die Variablen müsstest du normalerweise problemlos zugreifen können. Weiss jetzt auch nicht woran es hängt



  • Wenn das deine Cpp-Datei ist dann hast du ein Problem.
    Was hat

    int m_iCount = 0;
    int protokoll(CString szBuffer);
    int ip_aus();
    int hdd_ein();
    bool geloescht=false;

    in der verloren?

    m_netzwerkstatus = _T("");
        m_InetStat = _T("");
        m_HDDname = _T("");
        m_HDDpro = 0;
        m_HDD = 0;
        m_HDDname2 = _T("");
        m_HDDname4 = _T("");
        m_HDDname3 = _T("");
        m_HDD2 = 0;
        m_HDD3 = 0;
        m_HDD4 = 0;
        m_HDDpro2 = 0;
        m_HDDpro3 = 0;
        m_HDDpro4 = 0;
        m_WARNING = _T("");
        m_sTime = _T("");
        m_sCount = _T("");
    

    Ic gehe davon aus das diese von Assi erstellt wurden und somit sind es Member der Klasse und due kannst darauf zugreifen. Sollltest du jedeoch aus einer der
    int protokoll(CString szBuffer);
    int ip_aus();
    int hdd_ein();

    zugreifen wollen, denke über dein Design nach.



  • ja, diese Dateien wurden von einem Assistenten ertellt. Auch auf die Gefahr hin , das ich mich jetzt vollkommen blamiere:
    Warum gibt es ein Problem mit "int protokoll(CString szBuffer); int ip_aus();
    int hdd_ein(); " ?

    Also im konkreten Fall hab ich folgendes :
    eine Funktion

    int wiederh();
    

    . Fülle ich diese mit folgendem Code :

    if(m_HDDname != "")
    		{
    
    			if(m_HDDpro <=20)
    			{
    				SW = "Achtung auf Laufwerk "+m_HDDname+" ist nur noch wenig Speicherplatz verfügbar!";
    				old = m_WARNING;
    				m_WARNING = old + "\r\n" + SW;
    			}
    		}
    		if(m_HDDname2 != "")
    		{
    			if(m_HDDpro2 <=20)
    			{
    				SW = "Achtung auf Laufwerk "+m_HDDname2+" ist nur noch wenig Speicherplatz verfügbar!";
    				old = m_WARNING;
    				m_WARNING = old + "\r\n" + SW;
    			}
    		}
    		if(m_HDDname3 != "")
    		{
    			if(m_HDDpro3 <=20)
    			{
    				SW = "Achtung auf Laufwerk "+m_HDDname3+" ist nur noch wenig Speicherplatz verfügbar!";
    				old = m_WARNING;
    				m_WARNING = old + "\r\n" + SW;
    			}
    		}
    		if(m_HDDname4 != "")
    		{
    			if(m_HDDpro4 <=20)
    			{
    			SW = "Achtung auf Laufwerk "+m_HDDname4+" ist nur noch wenig Speicherplatz verfügbar!";
    			old = m_WARNING;
    			m_WARNING = old + "\r\n" + SW;
    			}
    		}
    

    bekomme ich folgende Fehler :
    --------------------Konfiguration: vaws - Win32 Debug--------------------
    Kompilierung läuft...
    vawsDlg.cpp
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(897) : error C2065: 'm_HDDname' : nichtdeklarierter Bezeichner
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(897) : error C2446: '!=' : Keine Konvertierung von 'char *' in 'int'
    Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(897) : error C2040: '!=' : 'int' unterscheidet sich von 'char [1]' in bezug auf die Anzahl vorgenommener Dereferenzierungen
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(900) : error C2065: 'm_HDDpro' : nichtdeklarierter Bezeichner
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(902) : error C2110: Zwei Zeiger koennen nicht addiert werden
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(903) : error C2065: 'm_WARNING' : nichtdeklarierter Bezeichner
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(904) : error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class CString' akzeptiert (oder keine geeignete Konvertierung moeglich)
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(907) : error C2065: 'm_HDDname2' : nichtdeklarierter Bezeichner
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(907) : error C2446: '!=' : Keine Konvertierung von 'char *' in 'int'
    Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(907) : error C2040: '!=' : 'int' unterscheidet sich von 'char [1]' in bezug auf die Anzahl vorgenommener Dereferenzierungen
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(909) : error C2065: 'm_HDDpro2' : nichtdeklarierter Bezeichner
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(911) : error C2110: Zwei Zeiger koennen nicht addiert werden
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(913) : error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class CString' akzeptiert (oder keine geeignete Konvertierung moeglich)
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(916) : error C2065: 'm_HDDname3' : nichtdeklarierter Bezeichner
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(916) : error C2446: '!=' : Keine Konvertierung von 'char *' in 'int'
    Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(916) : error C2040: '!=' : 'int' unterscheidet sich von 'char [1]' in bezug auf die Anzahl vorgenommener Dereferenzierungen
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(918) : error C2065: 'm_HDDpro3' : nichtdeklarierter Bezeichner
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(920) : error C2110: Zwei Zeiger koennen nicht addiert werden
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(922) : error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class CString' akzeptiert (oder keine geeignete Konvertierung moeglich)
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(925) : error C2065: 'm_HDDname4' : nichtdeklarierter Bezeichner
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(925) : error C2446: '!=' : Keine Konvertierung von 'char *' in 'int'
    Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(925) : error C2040: '!=' : 'int' unterscheidet sich von 'char [1]' in bezug auf die Anzahl vorgenommener Dereferenzierungen
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(927) : error C2065: 'm_HDDpro4' : nichtdeklarierter Bezeichner
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(929) : error C2110: Zwei Zeiger koennen nicht addiert werden
    E:\Programme\Microsoft Visual Studio\MyProjects\vaws\vawsDlg.cpp(931) : error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class CString' akzeptiert (oder keine geeignete Konvertierung moeglich)
    Fehler beim Ausführen von cl.exe.

    vaws.exe - 25 Fehler, 0 Warnung(en)

    ich denke es wird an dem liegen was Unix-Tom bereits angesprochen hat ...



  • Da es bei dir ein Grundlagenproblem ist kommt es ins Forum C++.

    Ich gehe mal davon aus das int wiederh() keine Methode der Dialogklasse ist.
    Du kannst nicht auf Member einer Klasse zugreifen wenn du keine Instanz der Klasse hast.
    Wie du die bekommst bzw. was an deinem Design falsch ist wird dir in C++ gezeigt.



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC mit dem Visual C++ in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • und wie kann ich "int wiederh()" zu einer Methode der Dialogklasse bekommen ?


Anmelden zum Antworten