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

  • 相关阅读:
    python子网拆分IP段
    动画制作库tween样例学习
    npm淘宝镜像
    nodejs webpack json 大文件,编译,out of memory
    python处理经过gzip压缩的网页内容
    判断百度某一经纬度的地图颜色值python
    考试总结及注意事项
    2152:聪聪可可(点分治)
    3687: 简单题(bitset)
    4514: [Sdoi2016]数字配对
  • 原文地址:https://www.cnblogs.com/xueye9/p/2823741.html
Copyright © 2011-2022 走看看