如何解决指针数组有问题
| 语言: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。但是,我很确定我没有正确引用它们。
任何帮助将不胜感激!
〜乔恩
解决方法
代替
DDX_Text(pDX,i,&var[j]);
采用
DDX_Text(pDX,*(var[j]));
由于您已经有了一个间接级别。
对这个:
for(int i = 2001,j = 0; i <= 2004,j < 4; i++,j++)
我不确定您是否知道在那里设置的条件将意味着正确的条件,因为这是逗号运算符的工作方式。您应该省略掉左边的那个,因为当j < 4
表达式正确时它永远不会为假,或者使用&&运算符来使其更清晰。
我假设您使用Visual Studio进行MFC编程,因此建议您在该行上设置一个断点,并确保正确初始化了数组。如果是这样,那么问题出在其他地方。
, DDX_Text(pDX,&var[j]); // \'i\' is the ID of the textbox
应该
DDX_Text(pDX,*var[j]); // \'i\' is the ID of the textbox
尽管查看循环以及索引i
和j
,但我不确定您要完成什么。
, 您需要取消引用CString指针:
DDX_Text(pDX,*var[j])
, DDX_Text(pDX,&var[j]);
正在发送指针的地址CString **。
您的DDX_Text函数正在请求对该值的引用。
试试DDX_Text(pDX,*var[j]);
。
, DDX_Text
期望引用CString
。但是,&var[j]
产生一个指针(CString**
)。您应该使用*var[j]
(取消引用指针)来调用它-即DDX_Text(pDX,*var[j]);
。
编辑:
您的循环可能未达到您的期望。 for
循环条件(i <= 2010,j < 4
),将i
与2010比较,将结果舍弃,将j
与4比较,然后使用该结果。如果要组合条件,请使用&&
(逻辑与),||
(逻辑或)或!
(逻辑非)。
但是,这些索引似乎还不错。
, 代替
DDX_Text(pDX,var[j]);
请勿使用地址(&var[j]
)或取消引用(*var[j]
)。只需使用var[j]
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。