2013-04-15 2 views
2

я получил эту ошибку при попытке сделать это:Неполное типа не допускается в STRUCT конструктору

#include <iostream> 
using namespace std; 
struct VertexStatus 
{ 
private: 
    int _CurrentStatus; 

public: 
    static VertexStatus Discovered = new VertexStatus(1); //incomplete type is not allowed 
    VertexStatus(int iStatus) 
    { 
     this->_CurrentStatus = iStatus; 
    } 
}; 

там что-то не так?

+3

Вы не хотите использовать 'new' здесь. – juanchopanza

+2

Многое не так, включая тот факт, что вы, кажется, путаете Java и C++. См. Ответ NPE о том, как правильно * делать то, что вы пытаетесь сделать. –

+0

@juanchopanza Возможно, пропущено форматирование/копирование/вставка :) – sarat

ответ

7

Переместить инициализацию из тела класса:

struct VertexStatus 
{ 
    ... 
    static VertexStatus Discovered; // declaration 
    ... 
}; 

VertexStatus VertexStatus::Discovered(1); // definition (with initializer) 

Если класс объявлен в заголовочном файле, поместите последнюю строку (определение) в соответствующем .cpp файл.

Обратите внимание, что я удалил new: он возвращает указатель, и в этом коде нет указателей.

-2

Размер VertexStatus неизвестен до тех пор, пока он не будет полностью объявлен, что не было в его собственном определении.

Вместо инициализировать статические переменный после объявления, например:

struct VertexStatus { 
    static VertexStatus Discovered; 
    // ... other stuff 
}; 

VertexStatus::Discovered = new VertexStatus(1); 

Если это внутри заголовок файла, вам нужно поставить последнюю строку в этом соответствующий файл .cpp.

+2

'Discover' не является указателем - этот код, как есть, не имеет смысла и не компилируется. –

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