一个纯虚函数导致的问题
2018-11-13 07:31:41来源:博客园 阅读 ()
WIN7系统,VC2010下。
程序A静态链接B.dll动态库。
B.dll中导出3个类:
(1) 基类
class AFX_EXT_CLASS base
{
public:
base(){};
virtual ~base(){};
virtual int getX() = 0;
protected:
int x;
......
}
(2)子类1
class AFX_EXT_CLASS derived_1
{
public:
derived_1(){};
virtual ~derived_1(){};
int getX() {return x;};
protected:
//int x; x是继承的
......
}
(2)子类2
class AFX_EXT_CLASS derived_2
{
public:
derived_2(){};
virtual ~derived_2(){};
int getX() {return x;};
protected:
//int x; x是继承的
......
}
函数getX()是为了防止父类实例化而设为纯虚函数。
在程序A中引用该DLL,一切都是按规矩来的(头文件包含,引入lib文件)
A中引用 dll中的类:
class A
{
base* pbase;
void OnCreateObject(int type)
{
if(type == 0)
pbase = new derived_1();
else
pbase = new derived_2();
}
。。。。。。
}
A程序将OnCreateObject与一个菜单命令连接起来,即此函数不是在系统初始化时调用。
编译通过。但在运行中,出现了问题,系统在加载DLL过程中意外退出。
通过思考,将base函数中的纯虚函数改变为:
int getX() {return x;};
而将两个子类中的同名函数删除,运行正常。
但问题在哪里? 为什么 ?
可能的原因:
该DLL在另一个DLL中也被引用,是base的指针形式,引用是通过值传入,并没有new实例,但可能是因为这个才导致程序不能进入吧?
在WIN10的VC2010中,程序编译就通不过,将纯虚函数改变为虚函数时,才能通过。
各位高手,你们认为呢?
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 转换函数搭配友元函数 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- 一个工业级、跨平台、轻量级的 tcp 网络服务框架:gevent 2020-06-05
- C++ const成员函数 2020-06-03
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash