从DLL中导出类错误

时间:2011-09-08 15:44:21

标签: c++ dll

我想只为客户端公开CreateSort()。它是为了实现sort类创建一个对象,即imSort然后将它返回给客户端。但是编译器说它不能创建一个抽象类的对象,尽管已经在派生类中定义了所有函数。

/////sort.h

class __declspec(dllexport) Sort {
public:
virtual int* BSort() const=0;
virtual void getdata() const=0;
};

extern "C" Sort *CreateSort();

/////imSort.h
#include "Sort.h"
class imSort : public Sort{
private:
int i,j,num;
int temp;
int *a;
public:
imSort();
int* BSort();
void getdata();
}

/////imSort.cpp

#include <iostream>
#include "imSort.h"
Sort *CreateSort()
{
return new imSort(); /* object of abstract class type "imSort" is not allowed: */
}
imSort::imSort()
{
i=j=num=0;
*a=0;
}

void imSort::getdata()
{
std::cout<<"\nEnter the number of elements..";
std::cin>>num;
for(i=0;i<num;i++)
{
    std::cin>>*a;
    *(a++);
}
}
int* imSort::BSort()
{
for(i=0;i<num;i++)
    for(j=i+1;j<num;j++)
    {
        if(*(a+i)<*(a+j))
        {
            temp=*(a+i);
            *(a+i)=*(a+j);
            *(a+j)=temp;
        }
    }
    return a;
}

2 个答案:

答案 0 :(得分:2)

您的基类有:

virtual int* BSort() const=0;
virtual void getdata() const=0;

但你的派生类有:

int* BSort();
void getdata();

重复virtual关键字是可选的,但没有const这些是单独的功能,与虚拟基本功能无关

因此,这些纯虚函数在派生类中保持不被覆盖,因此如果你问我,imSort(类型的傻名称)仍然是抽象的。

因此,您的固定派生类定义是:

class imSort : public Sort {
   private:
      int  i, j, num;
      int  temp;
      int* a;

   public:
      imSort();
      int* BSort() const;     // <--- const
      void getdata() const;   // <--- const
};                            // <--- ;

(请注意缩进如何提高代码的易读性?您忘记了类定义末尾的;。)


请在下次写一个完整格式的问题,并将您的问题减少到最小的测试用例。

答案 1 :(得分:0)

如果抽象Sort类中的虚函数声明为const,那么imSort类中的实现也应如此,但它们不是。

所以只需在这里添加const ......