Time slip through our fingers!

三千山

    路漫漫其修远兮,吾将上下而求索

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

C++接口继承找不到构造函数和析构函数

  在工作中有两个库A和B,其中A库中定义了一些接口(struct或虚基类,因为C++没有接口的概念所以用虚基类模拟接口),B库中的一些类实现A库定义的接口。

假设A库接口定义如下:

1 struct A_API Interface1
2 {
3      ~Interface1();
4      virtual bool SetValue1(int nVal) = 0;
5 }

B库某类定义文件如下:

class B_API BInstance : public Interface1
{
public:
    BInstance();
    ~BInstance();
 
public:
   virtual bool SetValue1(int nVal);
}

   B库类的实现省略,这样A库编译和连接都没有问题,B库编译连接也都正常。但是当在B库中实例化BInstace时出现连接错误,提示找不到Interface1的构造函数和析构函数。在

实际工作中的两个库都是带有命名空间的,遇到这个问题时最初认为是命名空间的问题,可是去掉命名空间后问题依旧。我找!找了一个下午又一个晚上,终于找到了。原来是因为A库中

的接口定义加了类导出符A_API。原理为当B库的实现类在使用A库接口定义时因为A库中接口定义有导出符,这样连接器认为Interface1是有实现的,会去A库中找Interface1的实现,但

是因为Interface1只是个接口而没有实现(无实现对应的cpp文件),连接器自然也就找不到Interface1的函数什么的。去掉A库接口的导出符后编译连接一切恢复正常。

 

 

 

 

 

 

posted on 2012-12-18 18:38  xueye9  阅读(1073)  评论(0编辑  收藏  举报
@Baldwin