Как я могу использовать глобальную переменную в C ++?

0

Я разрабатываю мобильное приложение 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 не должна вызывать никаких проблем.

  • 3
    Код выглядит правильно. Погуглив об этой ошибке, похоже, что у вас есть синтаксическая ошибка в другом месте файла .
  • 1
    Это весь global.h файл global.h ? Что включено непосредственно перед global.h ? Я подозреваю, что пропущена точка с запятой.
Теги:
qt
qml
blackberry-10

4 ответа

1

extern сообщает компилятору, что "этот символ определен в другом исходном файле" - поэтому символ существует, он безопасен для его использования. Вы получите ошибку связи, если вы на самом деле "лжете" об этом и не определяете символ, - но это другая история.

Там нет никаких проблем с кодом, который вы нам показали. Но вот ссылка, которая может помочь вам получить лучшую идею...

  • 0
    Возможно, вы могли бы сделать небольшое «резюме» о том, что ссылка содержит информацию - мы не знаем, как долго будет работать ссылка, и ваш ответ связан с информацией внутри этого другого сайта
1

Альтернативой extern являются статические переменные внутри класса:

//.h
struct Globals
{
    static int g_global_var;
};

//.cpp
int Globals::g_global_var = 0;

//usage:
Globals::g_global_var;
  • 0
    статические члены не являются глобальными в C ++, каждый файл .cpp будет иметь свою собственную копию переменной, как описано в этом форуме, вместо использования глобальной переменной
  • 4
    @ user2072762 неверно. static в области имен пространства отличается от static в области видимости класса.
Показать ещё 1 комментарий
0

Ваш код кажется прекрасным. Возможно, у вас есть ошибка в другом месте. Возможно, в строке есть точка с запятой (;), перед extern int g_nValue.

0

Вы не объявляете переменную exteren в блоке компиляции, в которой она определена. Вы только объявляете ее extern (и не определяете ее), если хотите использовать ее в других .cpp файлах (единицах компиляции).

  • 0
    К сожалению !! но я не поняла твой ответ. Можете ли вы объяснить больше?
  • 0
    Именно это и делает OP: объявляя переменную с использованием extern (в заголовке), и определяя ее без extern .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню