zoukankan      html  css  js  c++  java
  • C++接口继承找不到构造函数和析构函数

    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库接口的导出符后编译连接一切恢复正常。

  • 相关阅读:
    基于蓝牙的安卓客户端开发
    在word文档中添加上角标和下角标
    vs2008打开类视图,看不到类的解决方法
    容器vector 迭代器iterator 应用
    next_permutation()
    pair运用
    vector学习
    容器之vector
    指针 * &
    派生类中的构造函数和析构函数
  • 原文地址:https://www.cnblogs.com/xueye9/p/2823741.html
Copyright © 2011-2022 走看看