将变量名传递给函数 语言: VisualC++,MFC
环境:VisualStudio2005 所以我贴了一个类似的问题,但我逐渐意识到我问错了问题。我试图使用一个循环来调用几个不同变量上的函数,但是在这个过程中,程序崩溃了 下面是简化的代码,但我认为只解释它实际上更容易。我有一个函数,它接受CString作为参数。我有几个变量希望提供给这个函数,所以我将它们的名称放入一个数组中,并试图通过这种方式将它们传递给函数 //下面的代码是我所拥有的,但它不起作用// 头文件: 源文件: 构造函数() 源文件: theFunction()将变量名传递给函数 语言: VisualC++,MFC ,c++,visual-c++,function,variables,pointers,C++,Visual C++,Function,Variables,Pointers,环境:VisualStudio2005 所以我贴了一个类似的问题,但我逐渐意识到我问错了问题。我试图使用一个循环来调用几个不同变量上的函数,但是在这个过程中,程序崩溃了 下面是简化的代码,但我认为只解释它实际上更容易。我有一个函数,它接受CString作为参数。我有几个变量希望提供给这个函数,所以我将它们的名称放入一个数组中,并试图通过这种方式将它们传递给函数 //下面的代码是我所拥有的,但它不起作用// 头文件: 源文件: 构造函数() 源文件: theFunction() 就像我说的,我只
就像我说的,我只需要给函数提供变量的实际名称。至少我认为是这样。它实际上是在对话框中的文本框和存储文本框输入的变量之间建立连接。我正确地解除了引用,但我认为这不是正确的方法
谢谢你的帮助。对于回答我上一个问题的人,我为错误陈述这个问题表示歉意。
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[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
}
}
//头文件
类myClass
{
std::向量变量;
...
};
//源文件
myClass::myClass():var_4
{
...
}
void myClass::函数(CDATA Exchange*pDX)
{
CSAPrefsSubDlg::DoDataExchange(pDX);
for(inti=2001,j=0;ivar
是指向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[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
}
}
//头文件
类myClass
{
std::向量变量;
...
};
//源文件
myClass::myClass():var_4
{
...
}
void myClass::函数(CDATA Exchange*pDX)
{
CSAPrefsSubDlg::DoDataExchange(pDX);
对于(int i=2001,j=0;i您没有将正确的内容传递到DDX_文本中。它的第三个参数是对CString的引用。您传递的是指针的地址。因此您可能应该执行以下操作
DDX_Test(pDX, i, *var[j]);
您没有将正确的内容传递到DDX_文本中。它的第三个参数是对CString的引用。您传递的是指针的地址。因此,您可能应该执行以下操作
DDX_Test(pDX, i, *var[j]);
拍摄、复制和粘贴错误的内容。我将其正确地命名为*var[j],但它仍然不正确。拍摄、复制和粘贴错误的内容。我将其正确地命名为*var[j],但它仍然不正确。拍摄、复制和粘贴错误的内容。我将其正确地命名为*var[j]但它仍然不能正常工作。我感兴趣的不是存储在变量中的信息,而是变量的实际名称。我是否只需要创建一个变量名的CString数组?DDX_Text在寻找什么?如果它在寻找对CString的引用,那么不,否则,您需要将var设置为CString[]={“m_strop”,“m_strLeft”,…};我已经很久没有使用DDX_Text了,我不记得它作为第三个参数需要什么“变量名”是什么?在您的例子中,DDX_Text
复制控件的值(editbox或类似的东西)到CString
或反之亦然,具体取决于CDATA交换::m\u bsavead和validate
值。嘿,迈克,查看我第一篇文章的最底部。我把它放在那里:)拍摄、复制和粘贴错误的东西。我把它正确地命名为*var[j]但它仍然不能正常工作。我感兴趣的不是存储在变量中的信息,而是变量的实际名称。我是否只需要创建一个变量名的CString数组?DDX_Text在寻找什么?如果它在寻找对CString的引用,那么不,否则,您需要将var设置为CString[]={“m_strop”,“m_strLeft”,…};我已经很久没有使用DDX_Text了,我不记得它作为第三个参数需要什么“变量名”是什么?在您的例子中,DDX_Text
复制控件的值(editbox或类似的东西)到CString
或反之亦然,具体取决于CDATA交换::m\u bsavead和validate
值。嘿,迈克,看看我第一篇文章的最底部。我把它放在那里:)