2010-09-13 2 views
2

Я хочу сохранить статическую константную переменную как член класса. Можно ли сохранить и как я могу инициализировать эту переменную.Как сохранить переменную static const как член класса

Некоторые тела помогли, говоря это

QString <ClassName>::ALARM_ERROR_IMAGE = "error.png"; 

Initilizing value for a const data

Я попытался как этот

в классе CPP я пишу

static QString ALARM_WARNING_IMAGE ; 

В конструкторе я пишу

ALARM_WARNING_IMAGE  = "warning.png"; 

Но не работает ... Пожалуйста, помогите дать некоторые подсказки

ответ

3

Вот основная идея:

struct myclass{ 
//myclass() : x(2){}  // Not OK for both x and d 
//myclass(){x = 2;}  // Not OK for both x and d 
static const int x = 2; // OK, but definition still required in namespace scope 
           // static integral data members only can be initialized 
           // in class definition 
    static const double d; // declaration, needs definition in namespace scope, 
           // as double is not an integral type, and so is 
           // QSTRING. 
    //static const QString var; // non integral type 
}; 

const int myclass::x;    // definition 
const double myclass::d = 2.2; // OK, definition 
// const QString myclass::var = "some.png"; 

int main(){ 
} 
+0

Любая причина для комментирования 'var'? Это, по-видимому, означает, что оно недействительно, когда оно есть. –

+0

@Mike Seymour: Потому что у меня нет определения QString. – Chubsdad

0

Try:

QString ClassName::ALARM_WARNING_IMAGE = "warning.png";

+0

Любое обязательство объявить внутри класса C++ – Sijith

+0

Я хочу сделать его постоянным ... Без постоянного использования его ... – Sijith

+0

Если вы сделаете его постоянным, вы должны пометить ОБА * объявление * (в классе) и * определение * (как показывает этот ответ) как 'const'. –

0

только константные статические интегральные элементы данных разрешается инициализируется внутри класса или структуры.

8

Вне любой функции в исходном файле записи:

const QString ClassName::ALARM_WARNING_IMAGE = "warning.png"; 

Заголовок:

class ClassName { 
    static const QString ALARM_WARNING_IMAGE; 
}; 

Кроме того, ничего не пишут в конструкторе. Это будет инициализировать статическую переменную каждый раз, когда создается ClassName ... что не работает, потому что переменная const ... плохая идея, так сказать. consts может быть установлен только один раз во время объявления.

+0

Большое спасибо ... Его работа – Sijith