指针数组的问题

时间:2011-06-13 14:56:40

标签: c++ visual-c++ pointers mfc operator-overloading

语言: 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

6 个答案:

答案 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循环和你的索引ij,我不确定你想要完成什么。

答案 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]