我写了如下述的一个程序:
class cls_A
{
unsigned int m_Val;
}class cls_B
{
cls_A m_ClsA;
}class cls_C
{
cls_B m_ClsB;
}
.
.
.
cls_C * t_pC = NULL;
cls_C * t_clsC;
unsigned int t_CurVal;((t_clsC.m_ClsB).m_ClsA ).m_Val = 1;
t_pC = &(t_clsC);t_CurVal = 0;
t_CurVal = (((t_pC->m_ClsB).m_ClsA).m_Val);
我单步跟踪到最后的赋值语句,查看(((t_pC->m_ClsB).m_ClsA).m_Val)的值,显示出为1,而执行完最后的赋值语句后查看t_CurVal的值发觉不为1,而成了0x100···0(1后若干个0)。但此时(((t_pC->m_ClsB).m_ClsA).m_Val)的值任为1.这是为什么?我该怎样改?(注:我用的是vc6,会不会是版本太老的缘故)
class cls_A
{
unsigned int m_Val;
}class cls_B
{
cls_A m_ClsA;
}class cls_C
{
cls_B m_ClsB;
}
.
.
.
cls_C * t_pC = NULL;
cls_C * t_clsC;
unsigned int t_CurVal;((t_clsC.m_ClsB).m_ClsA ).m_Val = 1;
t_pC = &(t_clsC);t_CurVal = 0;
t_CurVal = (((t_pC->m_ClsB).m_ClsA).m_Val);
我单步跟踪到最后的赋值语句,查看(((t_pC->m_ClsB).m_ClsA).m_Val)的值,显示出为1,而执行完最后的赋值语句后查看t_CurVal的值发觉不为1,而成了0x100···0(1后若干个0)。但此时(((t_pC->m_ClsB).m_ClsA).m_Val)的值任为1.这是为什么?我该怎样改?(注:我用的是vc6,会不会是版本太老的缘故)
===又笔误了。
改为
cls_C t_clsC;
{
public:
unsigned int m_Val;
} ;class cls_B
{
public:
cls_A m_ClsA;
} ;class cls_C
{
public:
cls_B m_ClsB;
} ;
int _tmain(int argc, _TCHAR* argv[])
{
cls_C * t_pC = NULL;
cls_C t_clsC;
unsigned int t_CurVal; ((t_clsC.m_ClsB).m_ClsA ).m_Val = 1;
t_pC = &(t_clsC); t_CurVal = 0;
t_CurVal = (((t_pC->m_ClsB).m_ClsA).m_Val);
cout<<t_CurVal<<endl;
return 0;
}08下没问题
using namespace std;
class cls_A
{
public:
unsigned int m_Val;
} ;class cls_B
{
public:
cls_A m_ClsA;
} ;class cls_C
{
public:
cls_B m_ClsB;
} ;
int main(int argc, char* argv[])
{
cls_C * t_pC = NULL;
cls_C t_clsC;
unsigned int t_CurVal;
((t_clsC.m_ClsB).m_ClsA ).m_Val = 1;
t_pC = &(t_clsC);
t_CurVal = 0;
t_CurVal = (((t_pC->m_ClsB).m_ClsA).m_Val);
cout <<t_CurVal <<endl;
return 0;}vc6.0 sp6 下ok。。输出为1。单步跟踪调试也是1
搞程序最怕这样的态度,遇到问题先说是别人的问题。
#include "stdafx.h"
#include <iostream>using namespace std;class cls_A
{
public:
unsigned int m_Val;
};class cls_B
{
public:
cls_A m_ClsA;
};class cls_C
{
public:
cls_B m_ClsB;
};int _tmain(int argc, _TCHAR* argv[])
{
cls_C* t_pC = NULL;
cls_C t_clsC;
unsigned int t_CurVal; t_clsC.m_ClsB.m_ClsA.m_Val = 1;
t_pC = &(t_clsC); t_CurVal = 0;
t_CurVal = t_pC->m_ClsB.m_ClsA.m_Val; system("pause"); return 0;
}
05下没有任何问题!除了楼主几个笔误之外单步跟踪t_CurVal值为1!
我记得我自学的c++教材,最先讲到代码风格的问题,你去看看mfc的代码风格,变量命名方法,如何对齐括号。我的做法:class ClassA;ClassA* pA = NULL;unsinged int iCurVal;
c++的成员变量一般以m_开头,m_p开头是个指针,m_i是个整数。g开头作为全局变量。