ошибка C2259: '<someclass>': невозможно создать экземпляр абстрактного класса - PullRequest
2 голосов
/ 13 августа 2011

Получаю эту ошибку компилятора при попытке компилировать код VS 6 VC ++.<someclass> не является абстрактным классом.А при нажатии на ошибку указатель указывает на список системных файлов в первой строке функции

void resize(size_type _Newsize, _Ty _Val)       
{     
     if (_Mysize < _Newsize)  
         _Insert_n(end(), _Newsize - _Mysize, _Val);  
     else  
     while (_Newsize < _Mysize)  
        pop_back();  
}

Странно.Любые решения.Класс,

class SomeClass: public parentObject
{

  public:
    SomeClass() {}
    SomeClass(const someotherclass& p, double uu, double vv)
        { z= p; u = uu; v = vv; }
protected:
    double      u, v;       
     someotherclass z;  
};

1 Ответ

8 голосов
/ 13 августа 2011

Вы не можете создать экземпляр класса, если у него есть чисто виртуальные члены.Были ли эти чисто виртуальные члены объявлены в этом классе или в базовом классе .Класс не может быть создан, если не существуют все его члены.Класс, имеющий чисто виртуальные члены (объявленные в классе или в базовом классе), называется абстрактным классом.

Так что, если вы наследуете от базового класса, который имеет чисто виртуальные члены, вы должны реализовать их в производном классе, если вы хотите создать экземпляры этого класса (например, поместить их в std::vector).

Вы можете поместить указатели на абстрактный класс в std::vector,Но только указатели, а не сам объект.Таким образом, вам нужно было бы выделить ваши объекты с помощью new, но, поскольку класс является абстрактным, вы не можете создавать их вообще.Поэтому вам нужно получить новый класс, который реализует чисто виртуальные методы.И тогда вы сможете создать этот класс и поместить его в свой std::vector<someclass*>.

...