dynamic_cast错误
#include <iostream>
using namespace std;
class B
{
public:
void func1()
{
cout << "B::func1()" << endl;
}
virtual void func2()
{
cout << "B::func2()" << endl;
}
};
class D:public B
{
public:
void func1()
{
cout << "D::func1()" << endl;
}
void func2()
{
cout << "D::func2()" << endl;
}
void func3()
{
cout << "D::func3()" << endl;
}
};
int main(int argc, char* argv[])
{
B *pb = new D;
pb->func1();
pb->func2();
if(D* pd = dynamic_cast<D*>(pb))
pd->func3();
return 0;
}
上面程序在VC6下编译出现警告信息
warning C4541: 'dynamic_cast' used on polymorphic type 'class B' with /GR-; unpredictable behavior may result
运行输出
B::func1()
D::func2()
之后弹出debug error对话框,若把dynamic_cast改为static_cast则正常,为什么?
问题点数:10、回复次数:3Top
1 楼Andy84920(你也不懂)回复于 2004-12-01 22:49:55 得分 2
dev-c++:
B::func1()
D::func2()
D::func3()
未有任何问题.Top
2 楼Andy84920(你也不懂)回复于 2004-12-01 22:52:06 得分 3
若把dynamic_cast改为static_cast则正常
//不应该这样做的,这样没有什么意义,当然你只是测试.你的程序没有数据而矣.
//应该是VC的问题而不是程序的问题,我没看到有什么问题.Top
3 楼lkng8(小康)回复于 2004-12-01 23:15:15 得分 5
你这个程序主要是关于RTTI的。如果使程序可以运行的话,你必须在visual c++里面的:project->setting里面有个 c++ 框,你在 category 里面选择 c++ language,最后把 RTTI 框选上就可以运行了。Top




