【问题标题】:Parameters File to Store All Variables存储所有变量的参数文件
【发布时间】:2011-07-21 13:39:46
【问题描述】:

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

我在使用指针时遇到了麻烦。我不确定如何引用 Parameters 类。基本上,我的应用程序有两个主要组件:一个主对话框和一堆子页面。主对话框是显示和隐藏子页面的位置,具体取决于用户在主对话框左侧的列表框中选择的页面。

我现在只处理一个子页面,并且有以下内容,但是当我调试时,我得到了 到处都是。我已经大大简化了代码,但应该足以弄清楚我做错了什么。

问题:那么我如何在每个子对话框中指向这个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("")
    // [ ... ]
{
}

【问题讨论】:

  • 对不起,我没有说清楚。已添加。
  • 了解如何使用调试器。当坏指针被取消引用时,你需要停止执行
  • 我正在使用 Visual Studio 并且一直在添加断点以查看出错的地方,但是它不会让我一路执行...不是因为错误,只是因为它试图深入执行路径。
  • 找到回显“bad ptr”的文件(这可能需要一些时间)并在此处设置断点。完成后,单击调用堆栈以查看它被调用的位置。总之有上千种调试方法,你所要做的就是找到 1. 祝你好运。
  • 谢谢玛丽娜拉。现在尽力了,哈哈。

标签: c++ visual-c++ pointers mfc global-variables


【解决方案1】:

问题是您将页面设置为CSAPrefsDialog::OnInitDialog 中的局部变量,而这些变量在您离开函数后立即被销毁。您应该将它们作为CSAPrefsDialog 类的成员变量。你正在做的其他一切看起来都很好。

【讨论】:

  • 嘿,马克,我最初尝试过这样做,但是当我将 FSC_Main fscMain 放入头文件并编译后,尽管有正确的语法错误(在 fscMain 之前缺少';')包括,并且没有任何丢失的分号。我会再尝试。也许我做错了什么。
猜你喜欢
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多