2011-07-21 13 views
2

背景:所以我創建了一個應用程序,基本上是一個大型的首選對話框,用戶可以配置多個頁面,每個頁面都有許多不同的設置。這些設置以下拉框和文本框的形式顯示。我想將所有變量存儲在一個大型的「Parameters.h」文件中,以便我可以從應用程序的任何位置訪問它們。每個子頁面都有它自己的源文件和頭文件。參數文件來存儲所有變量

雖然我遇到了麻煩。我不知道如何引用Parameters類。基本上,我的應用程序有兩個主要組件:主對話框和一組子頁面。主對話框是根據用戶在主對話框左側的列表框中選擇的頁面來顯示和隱藏子頁面的位置。

我現在只使用一個子頁面,並且具有以下功能,但是當我調試時,我得到了各種各樣的<BadPtr>。我已經大大簡化了代碼,但它應該足以弄清楚我做錯了什麼。

問題:那麼如何在每個子對話框中指向這個Parameters類,以便我可以存儲和使用所有這些變量?


SAPrefsDialog.cpp:主對話框,裏面的子頁面

BOOL CSAPrefsDialog::OnInitDialog() 
{ 
    CDialog::OnInitDialog(); 
    FSC_Main fscMain; 
    fscMain.SetParametersPointer(&m_pParams); 
    // [ ... ] 
} 

SAPrefsDialog.h:主對話框頭文件

#include "Parameters.h" 

public: 
    CSAPrefsDialog(CWnd* pParent = NULL); // standard constructor 
    ~CSAPrefsDialog(); 

    Parameters m_pParams; 

FSC_Main.h:子頁頭文件

#include "Parameters.h" 

class FSC_Main : public CSAPrefsSubDlg 
{ 
// Construction 
public: 
    FSC_Main(CWnd* pParent = NULL); // standard constructor 

// Dialog Data 
    //{{AFX_DATA(FSC_Main) 
    enum { IDD = IDD_FS_CONFIG_MAIN }; 
    //}}AFX_DATA 

public: 

    void SetParametersPointer(Parameters* pParameters) 
     { m_Params = pParameters; } 

private: 
    Parameters *m_Params; 
}; 

Parameters.h

#include "stdafx.h" 
#include "prefs.h" 

#pragma once 

class Parameters 
{ 
public: 
     Parameters(); // standard constructor 
public: 
    ~Parameters(void); 

protected: 
    virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 

public: 

//***************************************************************************** 
// 
// FSC_Main.cpp Variables 
// 
//***************************************************************************** 

    CString m_strVehiclesMainNumVehicles; 
    CString m_strVehiclesMainMaxSensorCount; 
    CString m_strVehiclesMainTaskProcessingInterval; 
    CString m_strVehiclesMain 
    // [ ... ] 

Parameters.cpp

#include "stdafx.h" 
#include "prefs.h" 
#include "pages.h" 
#include "Parameters.h" 

//***************************************************************************** 
// 
// Parameters::Parameters 
// 
//***************************************************************************** 

Parameters::Parameters(): 
     m_strVehiclesMainNumVehicles("") 
    , m_strVehiclesMainMaxSensorCount("") 
    , m_strVehiclesMainTaskProcessingInterval("") 
    // [ ... ] 
{ 
} 
+0

什麼是*問題*? – Puppy

+0

對不起,我沒有明確。添加。 – Jon

+0

瞭解如何使用調試器。當不良指針被解除引用時,您需要暫停執行 – marinara

回答

0

問題在於,您將頁面製作爲CSAPrefsDialog::OnInitDialog中的局部變量,並且一旦離開函數,這些變量就會被銷燬。您應該將它們作爲CSAPrefsDialog類的成員變量。你做的一切看起來都很好。

+0

嘿馬克,我最初嘗試過這樣做,但是當我把FSC_Main fscMain放入頭文件,編譯後,儘管有正確的包含,並且沒有任何缺失,但我仍然收到語法錯誤(在fscMain之前缺少';'''分號。我會再嘗試。也許我做錯了什麼。 – Jon