背景:基本的に大きな設定ダイアログであるアプリケーションを作成しました。このアプリケーションでは、さまざまな設定を持つ多数のページを構成できます。これらの設定は、ドロップダウンとテキストボックスの形式です。私はすべての変数を1つの大規模な "Parameters.h"ファイルに保存して、アプリケーションのどこからでもアクセスできます。各サブページには、独自のソースファイルとヘッダーファイルがあります。パラメータすべての変数を格納するファイル
私はポインタに問題があります。 Parametersクラスの参照方法がわかりません。基本的には、私のアプリケーションは2つの主要なコンポーネントを持っています:メインのダイアログとサブ、子ページの束。メインダイアログは、メインダイアログの左側にあるリストボックスでユーザーが選択したページに基づいて、サブページを表示および非表示にする場所です。
私はちょうど1つのサブページで作業していますが、以下のものがありますが、デバッグすると<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