关于c ++:存储所有变量的参数文件

Parameters File to Store All Variables

背景:所以我创建了一个应用程序,它基本上是一个大型的首选项对话框,用户可以在其中配置多个页面,每个页面都有一系列不同的设置。这些设置以下拉列表和文本框的形式显示。我想把所有的变量存储到一个巨大的"parameters.h"文件中,这样我就可以从应用程序的任何地方访问它们。每个子页面都有自己的源文件和头文件。

不过,我的指针有问题。我不知道如何引用参数类。基本上,我的应用程序有两个主要组件:一个主对话框和一堆子页面。主对话框是根据用户在主对话框左侧的列表框中选择的页面显示和隐藏子页面的位置。

我现在只处理一个子页,并有以下内容,但是当我调试时,我会得到所有地方的。我已经大大简化了代码,但它应该足以找出我做错了什么。

问题:那么,如何在每个子对话框中指向这个参数类,以便存储和使用所有这些变量?

saprefsdialog.cpp:包含子页的主对话框

1
2
3
4
5
6
7
BOOL CSAPrefsDialog::OnInitDialog()
{
    CDialog::OnInitDialog();
    FSC_Main fscMain;
    fscMain.SetParametersPointer(&m_pParams);
    // [ ... ]
}

saprefsdialog.h:主对话框头文件

1
2
3
4
5
6
7
#include"Parameters.h"

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

    Parameters m_pParams;

fsc_main.h:子页标题文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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;
};

参数.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#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
    // [ ... ]

参数.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include"stdafx.h"
#include"prefs.h"
#include"pages.h"
#include"Parameters.h"

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

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


问题是,您在CSAPrefsDialog::OnInitDialog中将页面制作为局部变量,一旦离开函数,这些变量就会被销毁。您应该将它们作为CSAPrefsDialog类的成员变量。你所做的一切看起来都很好。