Классы не работают...

 

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

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

 Так вот. Взял я самые простые и очень не большие классы, которые и решил проверить. Из HandlingWithErrors вызываю объект класса Logging. Но почему-то после имени объекта класса Logging и двоеточия появляется перечень методов класса HandlingWithErrors, а не перечень методов класса Logging, как нужно. Как такое может быть? Исходняки прилагаю..

Косяк в классе 

В чём причина. Кривость языка или моя ошибка?

Файлы:
classes.zip  5 kb
 

Летаем по приборам? :-)

Напиши, что надо, и скомпилируй. Если получится, то проблема редактора. 

 

Вадим, в том то и дело, что всё компилируется. И методы работают. Но... писать то не удобно, когда методы не всплывают при написании. Идиотизм какой-то. Неужели такое не только у меня? Кидал эти 2 небольших класса (остальные которые огромные не переносил) в другой метаэдитор, и, там такая же хрень творится. Код компилится, методы рабочие, а писать не выходит нормально.

Возникает вопрос, как быть? Вроде бы же уже финальный релиз был. А толку? 

 
hoz:

Вадим, в том то и дело, что всё компилируется. И методы работают. Но... писать то не удобно, когда методы не всплывают при написании. Идиотизм какой-то. Неужели такое не только у меня? Кидал эти 2 небольших класса (остальные которые огромные не переносил) в другой метаэдитор, и, там такая же хрень творится. Код компилится, методы рабочие, а писать не выходит нормально.

Возникает вопрос, как быть? Вроде бы же уже финальный релиз был. А толку? 


При компиляции вылазят ошибки

'ib_PrintUP' - undeclared identifier Logging.mqh 43 16

'ib_CommentUP' - undeclared identifier Logging.mqh 44 18

2 error(s), 0 warning(s)

 
Vinin:


При компиляции вылазят ошибки

'ib_PrintUP' - undeclared identifier Logging.mqh 43 16

'ib_CommentUP' - undeclared identifier Logging.mqh 44 18

2 error(s), 0 warning(s)

 


Ну так да. Это же включения, которые и не должны компилироваться. Но это не мешает пользоваться объектами одного класса другим.

 Чтоб не было ошибок при компиляции прилагаю ещё один файл. Там разумеется все инклюды кроме 2 имеющихся нужно отключить. И всё будет компилироваться. 

Файлы:
 
Неужели всё так запущено... В сервисдеск заявку послал в пятницу ещё. Никто не отвечает. Работа застопорилась конкретно... :(
 

Доброго времени суток!

Не получается загрузить класс с параметрами в другом классе.

Вот к примеру есть класс:

class CGraphical

  {

    public:
      int param1, param2;

    public:
       // Конструкторы

       CGraphical (void{param1=1;  param2=2;} 

       CGraphical (int new1, int new2) {param1=new1;  param2=new2;} 

      ~CGraphical(void) {}

  };

Как мне теперь загрузить класс выше  с заданными параметрами в следующем классе:

class CTest

  {

     public:

        CGraphical Graf;  // ??? как правильно передать параметры


     public:

       // Конструкторы

        CTest ()  {} // ??? Или тут надо?

  };

Большая просьба помочь, кто может. Заранее спасибо!

 
Ruslan Piraliyev #:

Доброго времени суток!

Не получается загрузить класс с параметрами в другом классе.

В конструкторе класса можно использовать список инициализации:

CTest::CTest()
            : Graf(3, 4)
{
} 
 
Ihor Herasko #:

В конструкторе класса можно использовать список инициализации:

Спасибо огромное, получилось, хотя до этого список не работал, что то наверное не учел.

Подскажите еще - это единственный способ загрузить параметры?

 

Ruslan Piraliyev #
:

Спасибо огромное, получилось, хотя до этого список не работал, что то наверное не учел.

Подскажите еще - это единственный способ загрузить параметры?

Еще можно создать специальный публичный метод класса:

class CGraphical
 {
       int param1, param2;

    public:
       // Конструкторы
       CGraphical (void) {param1=1;  param2=2;} 
       CGraphical (int new1, int new2) {param1=new1;  param2=new2;} 
      ~CGraphical(void) {}

    void Init(int new1, int new2) 
    {
        param1 = new1;
        param2 = new2;
    } 
 };

Тут я перенес param1 и param2 в приватную секцию. А то они были общедоступны и их значения можно было изменять напрямую извне. 

Также часто практикуется (я бы даже сказал: рекомендуется) создавать экземпляр класса в процессе выполнения кода:

class CTest
{
      CGraphical *pGraf;

     public:
        CTest ();
        ~CTest();
  };

CTest::CTest()
{
   pGraf = new CGraphical(3, 4);
   if (CheckPointer(pGraf) == POINTER_INVALID)
      Alert("Instance creating error");
}

CTest::~CTest()
{
   if (CheckPointer(pGraf) != POINTER_INVALID)
      delete pGraf;
}
 
Ihor Herasko #:

Еще можно создать специальный публичный метод класса:

Тут я перенес param1 и param2 в приватную секцию. А то они были общедоступны и их значения можно было изменять напрямую извне. 

Также часто практикуется (я бы даже сказал: рекомендуется) создавать экземпляр класса в процессе выполнения кода:

Очень интересно, благодарю!