Кто-нибудь решал такую задачу с переменными... - страница 2

 

Наверно класс, в классе переменная, передавать ссылку на класс.

class CVariable{
   public:
   double val;
};

class CClass{
   protected:
      CVariable * m_tmp;
   public:
   void Fun1(CVariable & arg){
      m_tmp=GetPointer(arg);
   }
   void Fun1(CVariable * & arg){
      m_tmp=arg;
   }   
   void Fun2(double val){
      m_tmp.val=val;
   }   
};


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart(){

   CVariable tmp; // это как бы переменная
   CClass cl; // а это класс которому указывается переменная, а потом с ней что-то делается
   
   cl.Fun1(tmp); // указание переменной 
   
   cl.Fun2(10); // что-то делаем с переменой (присваиваем ей значение 10)
   
   Alert(tmp.val); // смотрим что там в переменной 

   
  }
//+------------------------------------------------------------------+
 
Dmitry Fedoseev:

Наверно класс, в классе переменная, передавать ссылку на класс.

Спасибо. Проверю, как это работает.

У меня более громоздко получилось.

 
Dmitry Fedoseev:

Наверно класс, в классе переменная, передавать ссылку на класс.

При компиляции выдается ошибка:

'Fun1' - no one of the overloads can be applied to the function call 

Компилировал такие строки:

double _xx=100;
   cl.Fun1(_xx); // указание переменной
  
   cl.Fun2(15); // что-то делаем с переменой (присваиваем ей значение 15)

=============================

Буду делать под свою задачу. Решение не универсальное. Но рабочее.

 
Eugeni Neumoin:

При компиляции выдается ошибка:

'Fun1' - no one of the overloads can be applied to the function call 

Компилировал такие строки:

double _xx=100;
   cl.Fun1(_xx); // указание переменной
  
   cl.Fun2(15); // что-то делаем с переменой (присваиваем ей значение 15)

=============================

Буду делать под свою задачу. Решение не универсальное. Но рабочее.

Потому-что вы передаете в метод класса обычную переменную double. На обычную переменную ссылку не получить. Поэтому вместо обычных переменных используется класс в котором в секции public есть переменная.

 
Dmitry Fedoseev:

Потому-что вы передаете в метод класса обычную переменную double. На обычную переменную ссылку не получить. Поэтому вместо обычных переменных используется класс в котором в секции public есть переменная.

Помещать заранее переменные в класс не подходит. Все переменные являются extern переменными. Точнее, их подменами.

Сделал по своему. Заодно получилось сделать универсальный алгоритм создания меню, который исключает внесение ошибок в программе при выводе большого количества пунктов меню. Сейчас в 15 менюшках 28 переменных можно редактировать. Некоторые переменные выводятся во многих меню. Суммарно получается 77 экземпляров переменных. Каждый экземпляр сохраняется и подключается в работу индикатора при выводе соответствующего меню. В пределе, в индикаторе около 400 extern переменных. Но в новых менюшках будут не все, а где-то 250. Алгоритм позволяет быстро создавать меню. Необходимо сейчас перевести в объекты меню выбора цвета (ранее это было сделано в процедурном стиле) и, возможно, битовые переменные. Остальные переменные (которые не входят в 250 избранных) другими способами редактируются через графический интерфейс. И небольшое количество останется, как и было ранее - редактирование через стандартное меню изменения параметров.

Сейчас можно мгновенно несколькими щелчками мыши настроить один из 21 зигзагов для поиска приемлемых экстремумов. И вывести нужные графические инструменты.

Дополнительные меню, надеюсь, позволят с такой же легкостью настраивать сами графические инструменты. Что ранее было затруднительно. Выбрать в меню редактирования параметров один из почти 400 параметров и отредактировать его ...

 
Eugeni Neumoin:

Помещать заранее переменные в класс не подходит. Все переменные являются extern переменными. Точнее, их подменами.

Сделал по своему. Заодно получилось сделать универсальный алгоритм создания меню, который исключает внесение ошибок в программе при выводе большого количества пунктов меню. Сейчас в 15 менюшках 28 переменных можно редактировать. Некоторые переменные выводятся во многих меню. Суммарно получается 77 экземпляров переменных. Каждый экземпляр сохраняется и подключается в работу индикатора при выводе соответствующего меню. В пределе, в индикаторе около 400 extern переменных. Но в новых менюшках будут не все, а где-то 250. Алгоритм позволяет быстро создавать меню. Необходимо сейчас перевести в объекты меню выбора цвета (ранее это было сделано в процедурном стиле) и, возможно, битовые переменные. Остальные переменные (которые не входят в 250 избранных) другими способами редактируются через графический интерфейс. И небольшое количество останется, как и было ранее - редактирование через стандартное меню изменения параметров.

 Все переменные являются extern переменными. Точнее, их подменами. 

Все-таки, PL/1... Редактор связей. 

 
Алексей Тарабанов:

 Все переменные являются extern переменными. Точнее, их подменами. 

Все-таки, PL/1... Редактор связей. 

С помощью MQL все сделал.
 
Eugeni Neumoin:
С помощью MQL все сделал.

Понимаю. JCL не понадобился. Мастерство не пропьешь. 

 
Eugeni Neumoin:

Помещать заранее переменные в класс не подходит...

Значит не в этом задача была, а как понял в том, что бы выполнить пересчет индикатора после подмены значения параметра.

 
В пределе, необходимо что-то подобное создавать: https://www.youtube.com/watch?v=0_Cgxy7N-V0&t=327s
Причина обращения: