语言: C ++,MFC
问题:我试图将函数传递给数组中包含的变量的一些指针,但编译器似乎并不同意我是如何做的。这是我的代码:
标题文件:
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
};
源文件: 的的DoDataExchange()
void FSC_3DPersp::DoDataExchange(CDataExchange* pDX)
{
CSAPrefsSubDlg::DoDataExchange(pDX);
for(int i = 2001, j = 0; i <= 2004, j < 4; i++, 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
);
我想以这种方式做我的DataExchange,因为在我的几个文件中,我有超过75个变量,并且使用循环显着地压缩代码,并简化了事情。
我知道我遇到的问题是我只是给DDX_Text提供错误的参数,但我知道它需要CStrings。但是,我很确定我没有正确引用它们。
非常感谢任何帮助!
~Jon
答案 0 :(得分:2)
而不是
DDX_Text(pDX, i, &var[j]);
使用
DDX_Text(pDX, i, *(var[j]));
因为你已经有了一个间接水平。
关于这个:
for(int i = 2001, j = 0; i <= 2004, j < 4; i++, j++)
我不确定你是否知道你在那里设置的条件意味着正确的条件,因为这就是逗号运算符的工作原理。你应该把左边的一个留下来,因为当j < 4
表达式正确时它永远不会是假的,或者使用&amp;&amp;操作员要更清楚。
我假设您使用Visual Studio进行MFC编程,因此我建议在该行上设置断点并确保正确初始化您的阵列。如果是,则问题出在其他地方。
答案 1 :(得分:1)
DDX_Text(pDX, i, &var[j]); // 'i' is the ID of the textbox
应该是
DDX_Text(pDX, i, *var[j]); // 'i' is the ID of the textbox
虽然,查看你的for循环和你的索引i
和j
,我不确定你想要完成什么。
答案 2 :(得分:1)
你需要dereference CString指针:
DDX_Text(pDX, i, *var[j])
答案 3 :(得分:1)
DDX_Text(pDX, i, &var[j]);
正在发送指针的地址,即CString **。
您的DDX_Text函数要求引用该值。
请尝试DDX_Text(pDX, i, *var[j]);
。
答案 4 :(得分:1)
DDX_Text
期望引用CString
。但是,&var[j]
会产生一个指针(CString**
)。您应该使用*var[j]
(取消引用指针)来调用它 - 即DDX_Text(pDX, i, *var[j]);
。
编辑:
你的循环可能不符合你的期望。 for
- 循环条件(i <= 2010, j < 4
),将i
与2010进行比较,抛出结果,将j
与4进行比较并使用该结果。如果要组合条件,请使用&&
(逻辑AND),||
(逻辑OR)或!
(逻辑NOT)。
然而,指数似乎还不错。
答案 5 :(得分:0)
而不是
DDX_Text(pDX, i, &var[j]);
使用
DDX_Text(pDX, i, var[j]);
不要使用地址(&var[j]
)或取消引用(*var[j]
)。只需使用var[j]
。