2011-07-21 11 views
2

背景:基本的に大きな設定ダイアログであるアプリケーションを作成しました。このアプリケーションでは、さまざまな設定を持つ多数のページを構成できます。これらの設定は、ドロップダウンとテキストボックスの形式です。私はすべての変数を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("") 
    // [ ... ] 
{ 
} 
+0

* *の質問は何ですか? – Puppy

+0

申し訳ありませんが、私は明示的ではありませんでした。追加されました。 – Jon

+0

デバッガの使い方を学びます。あなたは悪いポインタが参照解除されたときに実行を停止する必要があります – marinara

答えて

0

問題は、ローカル変数としてページをCSAPrefsDialog::OnInitDialogに作成していて、その変数を残すとすぐにそれらの変数が破棄されるということです。それらをあなたのCSAPrefsDialogクラスのメンバー変数として作成する必要があります。あなたがやっていることはすべて上手く見えます。

+0

ちょっとマーク、私はもともとそれをやってみたが、私はFSC_Main fscMainをヘッダファイルに入れてコンパイルしたが、正しいインクルードを持っていても何も見逃していないのに構文エラー(fscMainの前に ';'セミコロン。私はもう一度やり直します。たぶん私は何か間違ったことをしていました – Jon

関連する問題