2014-12-23 4 views
-1

, как решить эту проблему, как говорит, выделение объекта абстрактного типа класса в моем code'LList»выделение объекта абстрактного типа класса в моем коде

class Graphl : public Graph { 
private: 
    List<Edge>** vertex; 
    int numVertex, numEdge; 
    int *mark; 
public: 
    Graphl(int numVert) 
    { 
     Init(numVert); 
    } 

    void Init(int n) { 
     int i; 
     numVertex = n; 
     numEdge = 0; 
     mark = new int[n]; 
     for (i = 0; i<numVertex; i++) mark[i] = 0; 

     vertex = (List<Edge>**) new List<Edge>*[numVertex]; 
     for (i = 0; i<numVertex; i++) 
     { 

здесь проблеме говорится выделение объекта абстрактных класс типа 'LList'

  vertex[i] = new LList<Edge>(); 
     } 
+2

Что на самом деле 'Edge'? Я подозреваю, что это абстрактный класс. –

+1

Ну, вы не можете выделить объект абстрактного класса. Исправить это, чтобы не пытаться это сделать. Вместо этого выделите объект конкретного класса. –

+0

Я понятия не имею, есть ли разница между List и LList, вам нужно проверить это. Кроме того, прекратите использование необработанных указателей, массивов в стиле C и самописных списков. C++ поставляется с библиотекой, используйте ее. Никогда не используйте C-style casts. Этот фрагмент не нуждается в бросках. –

ответ

1

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

Кроме того, это выглядит странно:

List<Edge>** vertex; 

Почему указатель на указатель на список ребер? Я предполагаю, что вы на самом деле хотели написать

List<List<Edge *>> vertex; 

который был бы списком указателей на кромки. Это прекрасно, даже если Edge является абстрактным типом. Как правило, мы ссылаемся на абстрактные типы с помощью указателей или ссылок.

Я говорю это, не зная, что такое ваш . Я предполагаю, что он имеет семантику, подобную std::list.

Смежные вопросы