Einsteiger-Frage: Probleme mit Variablen - Instanzierung
-
Hallo,
Habe ein relativ simples Problem:
Ich habe 2 Dialogfenster. Das Ergebnis des einen Fensters bräuchte ich in dem andern.
habe folgendes probiert:
CConnect_to_Server connect;
MessageBox(connect.m_kryptkey);daraus folgt:
error C2039: 'm_kryptkey' : is not a member of 'CConnect_to_Server'
...\Connect_to_Server.h(13) : see declaration of 'CConnect_to_Server'Werde nur irgendwie nicht so recht schlau draus...
einen #include connect_to_server.h hab ich.Danke im voraus.
mfg
trequ
-
Naja, ich vermute mal Folgendes:
m_kryptkey ist in der Klasse CConnect_to_Server nicht deklariert, oder zumindest nur lokal in einer Schleife oder so.
-
Hallo,
Richtig, da war der Wurm drin.
m_kryptkey ist jetzt in Connect_to_Server public und hat da auch einen Wert.
Jetzt kriege ich zwar beim Starten keinen Fehler mehr, aber wenn ich dann folgendes mache:CConnect_to_Server connect; MessageBox(connect.m_kryptkey);bleibt die Dialogbox leer.
ich nehme mal an dass nach der übergabe kein Wert mehr da ist... nur: Wieso?mfg
trequ
-
Ist CConnect_to_server ein Dialogfeld ?
-
Ja, warum?
-
trequ schrieb:
Hallo,
CConnect_to_Server connect;
MessageBox(connect.m_kryptkey);[/cpp]bleibt die Dialogbox leer.
ich nehme mal an dass nach der übergabe kein Wert mehr da ist... nur: Wieso?trequ
was erwartest Du denn Bitte?
aus Deinem Codesnippet kann ich nur ableiten, daß du die Klasse
CConnect_to_Server instanziert hast und Dir über eine MessageBox den
Wert eines members dieser klasse(m_mkryptkey) anzeigen läßt.Woher sollen die Leute hier wissen, was in deinem Konstruktor steht, oder was Du hier vorhast?
epidemic
-
Weil ich aus deinem Code entnehme, dass das Dialogfeld gar nicht aufgerufen wird.

-
Hi,
also hier noch mal der ganze Code:
Datei Connect_to_Server.h
#if !defined(AFX_CONNECT_TO_SERVER_H__06F55074_FB66_4F47_92A2_C406604402D0__INCLUDED_) #define AFX_CONNECT_TO_SERVER_H__06F55074_FB66_4F47_92A2_C406604402D0__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // Connect_to_Server.h : header file // ///////////////////////////////////////////////////////////////////////////// // CConnect_to_Server dialog class CConnect_to_Server : public CDialog { // Construction public: CConnect_to_Server(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CConnect_to_Server) enum { IDD = IDD_CONNECT_TO_SERVER }; CProgressCtrl m_connect_progress; CString m_connectstatus; CString m_kryptkey; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CConnect_to_Server) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CConnect_to_Server) virtual void OnCancel(); afx_msg void OnTimer(UINT nIDEvent); virtual BOOL OnInitDialog(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_CONNECT_TO_SERVER_H__06F55074_FB66_4F47_92A2_C406604402D0__INCLUDED_)Datei Connect_to_Server.cpp
// Connect_to_Server.cpp : implementation file // #include "stdafx.h" #include "SecMail.h" #include "iostream.h" #include "fstream.h" #include "MakeServerLogin.h" #include "Connect_to_Server.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE #define IDT_TIMER1 1 static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CConnect_to_Server dialog CConnect_to_Server::CConnect_to_Server(CWnd* pParent /*=NULL*/) : CDialog(CConnect_to_Server::IDD, pParent) { //{{AFX_DATA_INIT(CConnect_to_Server) m_connectstatus = _T(""); //}}AFX_DATA_INIT m_connect_progress.SetRange(0,100); } void CConnect_to_Server::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CConnect_to_Server) DDX_Control(pDX, IDC_CONNECT_PROGRESS, m_connect_progress); DDX_Text(pDX, IDC_CONNECT_STATUS, m_connectstatus); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CConnect_to_Server, CDialog) //{{AFX_MSG_MAP(CConnect_to_Server) ON_WM_TIMER() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CConnect_to_Server message handlers void CConnect_to_Server::OnCancel() { CDialog::OnCancel(); } void CConnect_to_Server::OnTimer(UINT nIDEvent) { KillTimer(nIDEvent); //Timer beendet, Anmeldung eingeleitet //Statusausgabe m_connectstatus = "Verbindung wird hergestellt..."; m_connect_progress.OffsetPos(20); UpdateData(false); //Socket-Datei wird entfernt remove("comm.sock"); //Setze Sanduhr... CWaitCursor WCursor; //Perl-Prozess wird eingeleitet //.............................................. //....... Code, der eigentlich nix zur Sache tut //For testing purposes only m_kryptkey="12345678"; //Connection to Server OK, LOGIN... MakeServerLogin dlgMakeServerLogin; dlgMakeServerLogin.DoModal(); CDialog::OnCancel(); } BOOL CConnect_to_Server::OnInitDialog() { SetTimer(IDT_TIMER1, 20, NULL); CDialog::OnInitDialog(); return TRUE; }Datei MakeServerLogin.h:
if !defined(AFX_MAKESERVERLOGIN_H__2767EF91_877D_4DC9_A6C9_D6540589F1AA__INCLUDED_) #define AFX_MAKESERVERLOGIN_H__2767EF91_877D_4DC9_A6C9_D6540589F1AA__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // MakeServerLogin.h : header file // ///////////////////////////////////////////////////////////////////////////// // MakeServerLogin dialog class MakeServerLogin : public CDialog { // Construction public: MakeServerLogin(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(MakeServerLogin) enum { IDD = IDD_MAKE_SERVER_LOGIN }; CProgressCtrl m_connect_progress; CString m_connectstatus; CString m_user; CString m_pass; BOOL m_save_login_data; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(MakeServerLogin) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(MakeServerLogin) virtual BOOL OnInitDialog(); afx_msg void OnTimer(UINT nIDEvent); virtual void OnOK(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_MAKESERVERLOGIN_H__2767EF91_877D_4DC9_A6C9_D6540589F1AA__INCLUDED_)Datei MakeServerLogin.cpp:
// MakeServerLogin.cpp : implementation file // #include "stdafx.h" #include "SecMail.h" #include "MakeServerLogin.h" #include "Connect_to_Server.h" #include "iostream.h" #include "fstream.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // MakeServerLogin dialog MakeServerLogin::MakeServerLogin(CWnd* pParent /*=NULL*/) : CDialog(MakeServerLogin::IDD, pParent) { //{{AFX_DATA_INIT(MakeServerLogin) m_connectstatus = _T(""); m_user = _T(""); m_pass = _T(""); m_save_login_data = TRUE; //}}AFX_DATA_INIT m_connect_progress.SetRange(0,100); } void MakeServerLogin::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(MakeServerLogin) DDX_Control(pDX, IDC_CONNECT_PROGRESS, m_connect_progress); DDX_Text(pDX, IDC_CONNECT_STATUS, m_connectstatus); DDX_Text(pDX, IDC_USERNAME, m_user); DDX_Text(pDX, IDC_PASSWORD, m_pass); DDX_Check(pDX, IDC_SAVE_LOGIN_DATA, m_save_login_data); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(MakeServerLogin, CDialog) //{{AFX_MSG_MAP(MakeServerLogin) ON_WM_TIMER() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // MakeServerLogin message handlers BOOL MakeServerLogin::OnInitDialog() { SetTimer(IDT_TIMER1, 10, NULL); CDialog::OnInitDialog(); return TRUE; } void MakeServerLogin::OnTimer(UINT nIDEvent) { KillTimer(nIDEvent); //..................... //Code, der eigentlich nix zur Sache tut. CConnect_to_Server connect; MessageBox(connect.m_kryptkey); CDialog::OnTimer(nIDEvent); } void MakeServerLogin::OnOK() { //..................... //Code, der eigentlich nix zur Sache tut. CDialog::OnOK(); }Also wenn ich mich nicht irre, wird das Dialogfeld aufgerufen oder?
mfg
trequ
-
CConnect_to_Server connect; if(connect.DoModal() == IDOK) MessageBox(connect.m_kryptkey);DoModal zeigt das Dialogfeld modal an: Das heißt, dass das neue Dialogfeld aktiv ist und im alten Feld solange die Programmsteuerung gestoppt wird, bis das neue wieder verschwindet. Hat der user das neue Dialogfeld über OK verlassen (nicht über Abbrechen oder so), kommt die MessageBox.
Allgemein: Wenn du das zweite Dialogfeld durch OnOK(); verlässt, wird IDOK zurückgegeben, wenn du es durch OnCancel(); beendest, wird IDCANCEL zurückgegeben - so lässt sich vom ersten Dialogfeld aus prüfen, wie der Benutzer reagiert hat.
-
Hallo,
verstehe ich nicht so ganz.
Das Problem ist folgendes:
1. m_kryptkey hat einen Wert. (hab zum test 12345678 genommen)
2. Das neue Dialogfeld wird aufgebaut.
3. Jetzt will ich im neuen Dialogfeld den Wert von m_kryptkey haben, um ihn weiter zu verarbeiten. Im alten Dialogfeld hat er den Wert, in neuen ist er NULL.Warum?
mfg
trequ