{
A a;
p = &a;
}<-问题就在这里!
去掉{}就好了,原因是编译器把{}中的东东看成函数,C中好像就是这样的。
我在写for(int i=0; i<10; i++)
for(int j=0; j<10; j++)
时它还说俺j重复定义呢。
A a;
p = &a;
}<-问题就在这里!
去掉{}就好了,原因是编译器把{}中的东东看成函数,C中好像就是这样的。
我在写for(int i=0; i<10; i++)
for(int j=0; j<10; j++)
时它还说俺j重复定义呢。
解决方案 »
- 怎么清除发送到串口中的命令?
- beginthreadex
- 求winsock聊天程序,只要可以简单的完成通讯功能就好!
- 相对路径问题
- 如何在MFC中利用ODBC自动加载和创建一个新的数据库(使用的是SQL SERVER)(急)
- 初始化一个基于FormView的SDI,初始化formview是不是在OnInitialUpdate()函数中进行
- 关于数据类型的问题,请大家来帮忙看一下!
- 如何使用OLEDB实现BOF/EOF功能
- 请问如何拦截CFileDialog中显示文件部分?
- 如何在框架(CHTMLVIEW为基类)和html文档间相互通信?
- 我的Socket类为何Create()不了?
- 谁来教教我?
就算a指针没有初始化,Func也是可以用的,因为Func不是虚函数的缘故。
这在前面的贴子里讨论过了。
是域限定附
就像
for(;;)
{
int a=0;
}
一样
你的a离开{}后就会被析构,所以运行~A,不行你试图跟踪运行运行。
然后你的p->Func()后被执行,所以这样输出。
如果你在vc7生成.exe则生成的代码应该会执行出错,
出现这样结果的原因是对象析构后原对象已经取不到原对象空间的值了,
而p是一个指针,它指向原对象地址,只要原地址中的值还没有被冲,则就会执行出结果来,所以就不奇怪了(C/C++不检查越界)
A *p;
{
A a;
p = &a;
} //A a 变量生命周期结束,输出“Destruction”,但是这时的A p仍然存活。
p->Func();//输出“hello”
}
但是如果你把Func设成virtual就会出错,因为虚函数与对象相关.
#include <iostream.h>class A
{
public:
~A(){ cout << "Destruction" << endl; }
void Func(){ cout << "Hello" << endl;}
};void main()
{
A *p = NULL;
p->Func();
return;
}
#include <iostream.h>class A
{
int i;
public:
~A(){ cout << "Destruction" << endl; }
void Func(){ cout << "Hello" <<i<< endl;}
};main()
{
A *p;
{
A a;
p = &a;
}
p->Func();
}
执行就会出错。
也谢谢sun2000(sun)和e_notimpl(e_notimpl)让我看到了另外一些问题。
谢谢所有人的热情参与……散分!