2012-07-25 3 views
4

Мне нужно создать статический объект внутри определения класса. Это возможно в Java, но в C++ Я получаю сообщение об ошибке:Определить переменную статического объекта const внутри класса

../PlaceID.h:9:43: error: invalid use of incomplete type ‘class 
PlaceID’ ../PlaceID.h:3:7: error: forward declaration of ‘class 
PlaceID’ ../PlaceID.h:9:43: error: invalid in-class initialization of static data 

Мой класс выглядит следующим образом:

#include <string> 

class PlaceID { 

public: 

    inline PlaceID(const std::string placeName):mPlaceName(placeName) {} 

    const static PlaceID OUTSIDE = PlaceID(""); 

private: 
    std::string mPlaceName; 
}; 

Можно ли создать объект класса внутри этого класса? Каковы предпосылки, которые он должен соблюдать?

ответ

11

Вы не можете определить переменную-член, потому что класс еще не определен. Вы должны сделать это следующим образом:

class PlaceID { 

public: 

    inline PlaceID(const std::string placeName):mPlaceName(placeName) {} 

    const static PlaceID OUTSIDE; 

private: 
    std::string mPlaceName; 
}; 

const PlaceID PlaceID::OUTSIDE = PlaceID(""); 
+0

Я думал об этом, но забота была о памяти. Но теперь я понял, что память, используемая в обоих вариантах, на самом деле равна. Кстати, в вашем ответе должно быть «const static», но вы все равно правы. – Benjamin

+3

@Benjamin Ключевое слово 'static' необходимо только при объявлении переменной внутри класса, а не при определении ее вне. –

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