экспорт класса из ошибки dll - PullRequest
       3

экспорт класса из ошибки dll

0 голосов
/ 08 сентября 2011

Я хочу выставить только CreateSort () для клиента.он должен был создать объект для реализации класса сортировки, т.е. 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 ]

2 голосов
/ 08 сентября 2011

Ваш базовый класс имеет:

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
};                            // <--- ;

(Обратите внимание, как отступ улучшает читаемость вашего кода? И вы забыли ; в конце определения вашего класса.)


Пожалуйста, напишите полностью сформированный вопрос в следующий раз и уменьшите свою проблему до минимального теста.

0 голосов
/ 08 сентября 2011

Если виртуальные функции в абстрактном классе Sort объявлены const, то должны быть реализованы и в классе imSort, но это не так...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...