【发布时间】:2011-06-13 14:56:40
【问题描述】:
语言: 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。但是,我很确定我没有正确引用它们。
任何帮助将不胜感激!
~乔恩
【问题讨论】:
-
我修复了取消引用错误,但现在我的程序在代码到达 for 循环时崩溃。我收到以下错误:“访问冲突读取位置 0x000000a3。”也许我的索引不正确?我不确定它还能是什么......
-
您有包含 75 个控件的对话框?你真正想要完成什么?那个 for 循环可能会引起我的注意,就像 CRect 的字符串表示对我来说一样。
-
显然您没有在编译时启用警告。如果你要求它这样做,任何体面的编译器都会告诉你语法错误。
-
我基本上是在为一个更大的应用程序创建一个首选项对话框。我的偏好对话框页面之一有一个大表,用户需要用值填写。我刚刚数了一下,我夸大了一点……在我最大的对话框首选项屏幕上有 54 个 CEdit,而不是 75 个。
标签: c++ visual-c++ pointers mfc operator-overloading