c++ - 将变量 N​​AME 传递给函数

标签 c++ visual-c++ function variables pointers

语言:Visual C++、MFC

环境:Visual Studio 2005

所以我发布了一个类似的问题,但我开始意识到我问错了问题。我正在尝试使用循环在几个不同的变量上调用一个函数,但是在这个过程中的某个地方,程序崩溃了。

下面是简化的代码,但我认为直接解释它实际上更容易。我有一个接受 CString 作为参数的函数。我有几个变量希望提供给该函数,因此我将它们的名称放入一个数组中,并试图以这种方式将它们传递给该函数。

//下面的代码是我有的,但它不起作用//

头文件:

CString m_strTop;
CString m_strLeft;
CString m_strRight;
CString m_strBottom;

CString *var[4];

源文件: 构造函数()

CString *var[4] = {
  &m_strTop
, &m_strLeft
, &m_strRight
, &m_strBottom
};

源文件: 函数()

void myClass::DoDataExchange(CDataExchange* pDX)
{
   CSAPrefsSubDlg::DoDataExchange(pDX);

   for(int i = 2001, j = 0; i <= 2004; i++, j++)
   {
       // THE LINE BELOW IS WHERE THINGS GO WONKY, SPECIFICALLY AT &var[j]
       DDX_Text(pDX, i, *var[j]); // 'i' is the ID of the textbox
   }
} 

-- DDX_Text 期望什么--

void AFXAPI DDX_Text(
   CDataExchange* pDX,
   int nIDC,
   CString& value 
);

所以就像我说的,我只需要为函数提供变量的实际名称。至少我认为。它实际做的是在对话框中的文本框和存储文本框输入的变量之间建立连接。我正在正确取消引用和所有内容,但我认为这不是正确的方法。

感谢您的帮助。对于回答我之前问题的人,我很抱歉错误地陈述了这个问题。

最佳答案

var 是指向 CString 的指针数组。
var[j] 是指向 CString 的指针。
&var[j] 是指向CString 的指针。

现在您需要传递 CString 对象。所以你需要:

DDX_Text(pDX, i, *var[j]); // dereference a pointer to CString.

考虑使用 std::vector 而不是 C 数组。它将是:

std::vector<CString> var(4);
...

DDX_Text(pDX, i, var[j]); // pass a CString object

我注意到您在构造函数中再次声明了变量 var:

CString *var[4] = { // this declares new temporary variable, 
                    // it doesn't initialize one from the header file
  &m_strTop
, &m_strLeft
, &m_strRight
, &m_strBottom
};

不应该吗? :

var[0] = &m_strTop;
var[1] = &m_strLeft;
var[2] = &m_strRight;
var[3] = &m_strBottom;

我想您需要以下内容:

// header file
class myClass
{
  std::vector<CString> var_;
  ...
};

// source file
myClass::myClass() : var_(4)
{
   ...
}

void myClass::theFunction(CDataExchange* pDX)
{
   CSAPrefsSubDlg::DoDataExchange(pDX);

   for(int i = 2001, j = 0; i <= 2004; i++, j++)
   {
       DDX_Text(pDX, i, var_[j]); // 'i' is the ID of the textbox
   }
} 

关于c++ - 将变量 N​​AME 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6333121/

相关文章:

c++ - constexpr 构造函数不会显示覆盖率数据

c++ - GPU 线程分歧的高级问题

c++ - 在程序中使用函数会加快执行速度吗?

c++ - 如何使用 Boost MSM 减少编译时间

function - F# 中的函数值是如何传递的?

javascript - 第一次这一行 console.log ("alphabet--->"+ alphabet);正在打印未定义

c++ - 如何在 Mac 上使用 C++ 停止正在运行的并行线程?

c++ - 无限数量的复选框

windows - 在 visual studio 2010 中找不到 msbuild.exe

javascript - JavaScript/jQuery 的顺序