2015-12-25 2 views
-1

Мне нужно получить доступ к глобальной переменной из функции. Моя декларация выглядит следующим образом:Доступ к глобальной статической переменной

file: HeaderFile.hpp 
namespace SomeNamespace {    
    static SomeClass *globalvariable; 
} 

Я должен получить доступ к этому из другого файла (CPPFILE.cpp- in which I have #include HeaderFile.hpp). У меня есть локальная переменная:

SomeClass *localvariable 

После изменения этого localvariable в функции, мне нужно назначить его GlobalVariable. Например:

SomeNamespace::globalvariable = localvariable; 

Хотя это не работает. Что бы я ни печатал, я получаю сообщение об ошибке. Либо этот тип не определен (VS сообщает, что он автоматически меняет его на int, но тогда это несоответствие класса), или если я пишу класс до globalvariable, я получаю ошибку, которую я пытаюсь переопределить.

Обратите внимание, что я не знаком с C++ и указателями.

EDIT:

SomeNamespace::globalvariable = localvariable 
ERROR: missing type specifier - int assumed. Note: C++ does not support default-int 

SomeClass * SomeNamespace::globalvariable = localvariable 
ERROR: SomeClass * SomeNamespace::globalvariable redefinition 
+4

Попробуйте создать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и покажите нам и, пожалуйста, укажите фактические ошибки, которые вы получаете. –

+0

«глобальный статический» - это противоречие в терминах. Я предлагаю пересмотреть основы, прежде чем пытаться работать над многофайльными проектами. –

+0

См. Править. – Wanderer

ответ

3

Если она статична, вы не можете получить доступ к нему за пределами этого файла. Возможно, вам нужна регулярная переменная и декларация extern. Обратите внимание:

Файл A:

namespace SomeNamespace {    
    SomeClass *globalvariable; 
} 

Файл B:

namespace SomeNamespace {    
    extern SomeClass *globalvariable; 
} 

//... 

SomeClass *localvariable; 

//... 

SomeNamespace::globalvariable = localvariable; 

И если вы новичок в C++ пытаются не использовать указатели. Найдите интеллектуальные указатели и/или как жить с распределением стека для этих задач.

+1

Я нахожу ваш совет относительно указателей довольно любопытным - умные указатели - указатели, с добавленной собственностью и пожизненной семантикой. Они не заменяют исходных указателей, и мы, конечно, недостаточно знаем о случае OP, чтобы узнать, подходят ли они здесь. – Quentin

+0

Вы, безусловно, правы, но если он новый и без правильного руководства, он может попасть в C + [sic] ловушку, считая, что способ хранения объектов кучи - это указатели. Даже если он их не использует, было бы полезно узнать их. –

+0

«Старайтесь не использовать указатели» звучит как заявка на одеяло, но я понимаю, что вы имеете в виду. – Quentin

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