连赋值语句都出错,这是什么世道啊!救命啊,各位。

MSAD 2009-08-17 05:26:40
我写了如下述的一个程序:
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,会不会是版本太老的缘故)
...全文
226 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hui2tao 2009-08-21
  • 打赏
  • 举报
回复
楼主没事 自己整自己啊
huziwu 2009-08-18
  • 打赏
  • 举报
回复
楼主最好检查一下自己的代码是否还存在别的笔误!很可能是笔误造成的。因你LS很多人都验证那样写是没错的。
zhileichen 2009-08-17
  • 打赏
  • 举报
回复
这代码看的头晕, 注意变量的命名方法
zhugay 2009-08-17
  • 打赏
  • 举报
回复
vc6不会有问题,我用了很多年,很多时候调试不出错误原因时都以为是vc6有错误,最终发现还是我的错。就算vc6有bug,应该也不至于很严重,至少对我这样的业余编程人员不会有太大影响。

朋友,你的代码既然都在单步调试了,应该不会有语法错误,你直接粘贴过来就行了,没有必要又去重新打一遍,你发帖在点确认前最好再检查一遍。


我记得我自学的c++教材,最先讲到代码风格的问题,你去看看mfc的代码风格,变量命名方法,如何对齐括号。我的做法:class ClassA;ClassA* pA = NULL;unsinged int iCurVal;
c++的成员变量一般以m_开头,m_p开头是个指针,m_i是个整数。g开头作为全局变量。
周成风 2009-08-17
  • 打赏
  • 举报
回复

#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!
schlafenhamster 2009-08-17
  • 打赏
  • 举报
回复
注:我用的是vc6,会不会是版本太老的缘故)[color=#FF0000][/color]
搞程序最怕这样的态度,遇到问题先说是别人的问题
tikycc2 2009-08-17
  • 打赏
  • 举报
回复
建议初学者 看看 windows 核心编程 这本书, 有助于 提高 综合能力 。主要是了解内部原理阿 。如果你看到程序语言 能想到 语言的汇编层 实现, 你就厉害了。
MoXiaoRab 2009-08-17
  • 打赏
  • 举报
回复
LS几位貌似解决了嘛
songtao_01 2009-08-17
  • 打赏
  • 举报
回复
指针的问题
zngsai 2009-08-17
  • 打赏
  • 举报
回复
验证10正确~!

[Quote=引用 10 楼 roman_v 的回复:]
#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 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
[/Quote]
roman_v 2009-08-17
  • 打赏
  • 举报
回复
#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 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
fishion 2009-08-17
  • 打赏
  • 举报
回复
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);
cout<<t_CurVal<<endl;
return 0;
}

08下没问题
想你的我们 2009-08-17
  • 打赏
  • 举报
回复
这命名真看的要命!!
快乐鹦鹉 2009-08-17
  • 打赏
  • 举报
回复
命中了。
MSAD 2009-08-17
  • 打赏
  • 举报
回复
不好意思敲错了,t_clsC变量的说明是,cls_C t_clsC;
雪影 2009-08-17
  • 打赏
  • 举报
回复
cls_C * t_clsC;
改为
cls_C t_clsC;
roman_v 2009-08-17
  • 打赏
  • 举报
回复
看得我眼花,我觉得直接用abc我看的更清爽点……
快乐鹦鹉 2009-08-17
  • 打赏
  • 举报
回复
cls_C * t_clsC;
===又笔误了。
roman_v 2009-08-17
  • 打赏
  • 举报
回复
t_pC 和 t_clsC 都没new?
fishion 2009-08-17
  • 打赏
  • 举报
回复
cls_C * t_clsC = new cls_C;

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧