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

  • 相关阅读:
    Java IO 之 RandomAccessFile 操作文件内容
    Java IO 之 FileFilter与FilenameFilter
    Java IO 之 File 的创建、重命名与遍历
    Java IO 之 System类
    JVM内存区域配置
    切换 显示与隐藏页面元素
    thead tfoot tbody标签的使用
    使用锚点在HTML页面中快速移动
    ASP.NET Core 项目归档
    检测到有潜在危险的 Request.Form 值 转
  • 原文地址:https://www.cnblogs.com/xueye9/p/2823741.html
Copyright © 2011-2022 走看看