2015-07-30 7 views
-1

Я отчаянно пытаюсь получить общую переменную между двумя классами на C++, но я не могу ее разглядеть. Я пробовал getters и seters и называл его как статическую переменную, но ничего.C++ Не удается получить доступ к общедоступной переменной между классами

Это то, что я пробовал:

DataGrabber.h

#pragma once 

class DataGrabber { 
    public: 
     static float temp; 

     void readProcess(){ 
      temp = 1.2; 
     } 
} 

Particle.h

#pragma once 

class Particle { 
    public: 
      void update() { 
       float x = DataGrabber::temp; 
      } 

И ТОГДА ЭТО:

DataGrabber.h

#pragma once 

class DataGrabber { 
    public: 
     float temp; 

     float get(){return temp;} 

     void readProcess(){ 
      temp = 1.2; 
     } 
} 

Particle.h

#pragma once 

class Particle { 
    public: 
      void update() { 
       float x = DataGrabber.get(); 
      } 

Они оба являются #include в другом главном заголовке, testApp.h.

+1

Не знаю, что вы просите. –

+0

'DataGrabber' является _type_ и не может использоваться так, как в вашем втором примере. Если вы хотите называть его без экземпляра 'DataGrabber', то член (т.е.' get') должен быть 'static' _and_, вам нужно предоставить такое квалифицированное имя, как' DataGrabber :: get' или 'DataGrabber :: temp' , –

+1

Первый пример выглядит так, как будто он может работать. Какое сообщение об ошибке вы получаете? Вы включаете DataGrabber.h из Particle.h? –

ответ

2

Какая проблема? Как вы используете эти классы?

Несмотря на это, есть несколько проблем с вашим кодом.

Во-первых, почему вы используете getter, если вы делаете переменную общедоступной? Если вы собираетесь использовать этот дизайн, вы должны скрыть переменную как конфиденциальную, чтобы защитить ее от непосредственной модификации.

Во-вторых, если это простая переменная-член, вы должны получить доступ к нему через объект, который вы передаете в вашей функции:

void update(DataGrabber& grabber) { 
    float x = grabber.get(); 
} 

В этом случае, вы должны создать этот объект в основной код , которые вы не показали.

Если вы хотите вместо этого использовать статическую переменную, взгляните на шаблон Singleton, но я бы посоветовал это сделать, если нет лучших вариантов для вашей точной проблемы.

Наконец, вы должны # включить все прямые зависимости в файлы заголовков. Ваша Particle зависит от DataGrabber, поэтому вы должны включить его заголовок из Particle.h. Или, по крайней мере, вы должны добавить форвардную декларацию.

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