Я разрабатываю мобильное приложение Blackberry 10. используя временные IDE (BB собственный SDK).
В моем приложении я хочу использовать глобальные переменные, которые будут использоваться многими классами.
Я пробовал код ниже, как описано в этой ссылке, но когда я добавляю extern- инструкцию перед объявлением переменной " g_nValue * " в файле ".h", она возвращает ошибку "класс хранения, указанный для" g_nValue ""
*/global.cpp:
// declaration of g_nValue
int g_nValue = 5;
*/global.h:
#ifndef GLOBAL_H // header guards
#define GLOBAL_H
// extern tells the compiler this variable is declared elsewhere
extern int g_nValue;
#endif
У кого-нибудь есть идея по этому поводу? Я много искал, и все они говорили, что инструкция extern не должна вызывать никаких проблем.
extern
сообщает компилятору, что "этот символ определен в другом исходном файле" - поэтому символ существует, он безопасен для его использования. Вы получите ошибку связи, если вы на самом деле "лжете" об этом и не определяете символ, - но это другая история.
Там нет никаких проблем с кодом, который вы нам показали. Но вот ссылка, которая может помочь вам получить лучшую идею...
Альтернативой extern являются статические переменные внутри класса:
//.h
struct Globals
{
static int g_global_var;
};
//.cpp
int Globals::g_global_var = 0;
//usage:
Globals::g_global_var;
static
в области имен пространства отличается от static
в области видимости класса.
Ваш код кажется прекрасным. Возможно, у вас есть ошибка в другом месте. Возможно, в строке есть точка с запятой (;), перед extern int g_nValue
.
Вы не объявляете переменную exteren
в блоке компиляции, в которой она определена. Вы только объявляете ее extern
(и не определяете ее), если хотите использовать ее в других .cpp
файлах (единицах компиляции).
extern
(в заголовке), и определяя ее без extern
.
global.h
файлglobal.h
? Что включено непосредственно передglobal.h
? Я подозреваю, что пропущена точка с запятой.