背景:所以我創建了一個應用程序,基本上是一個大型的首選對話框,用戶可以配置多個頁面,每個頁面都有許多不同的設置。這些設置以下拉框和文本框的形式顯示。我想將所有變量存儲在一個大型的「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("")
// [ ... ]
{
}
什麼是*問題*? – Puppy
對不起,我沒有明確。添加。 – Jon
瞭解如何使用調試器。當不良指針被解除引用時,您需要暫停執行 – marinara