将变量NAME传递给函数

| 语言: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
的指针。 现在您需要传递the5ѭ对象。因此,您需要:
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
   }
} 
    
        您没有将正确的内容传递给DDX_Text。它的第三个参数是对CString的引用。您正在传递一个指针的地址。所以你应该做一些类似的事情
DDX_Test(pDX, i, *var[j]);
    

要回复问题请先登录注册