Здравствуйте!
Помогите, пожалуйста разобраться в синтаксисе! Я вот так пишу:
и получаю ошибку при попытке обращения:
Сообщение об ошибке в заголовке темы:
А как правильно пользоваться статическими переменными классов?
Надо так
class Martingale { public: static double LossLots[MAX_LOSSES_IN_A_ROW]; }; double Martingale::LossLots[MAX_LOSSES_IN_A_ROW];
Надо так
Супер! Да, так работает!
Дядюшка Страуструп создал весьма путанный язык. Некоторые выверты типа этого двойного объявления статического поля я не могу объяснить логически. Ну а MQ вынуждены следовать подмножеству стандарта С++.
Как и для всех глобальных переменных, порядок инициализации/деинициализации статических членов классов будет зависеть от порядка их размещения(объявления вне класса).
Кроме того, не редко требуется инициализация таких переменных значением + некоторым типам требуется явная инициализация (вызов конструктора с параметрами).
Некоторые программисты могут заложиться на порядок инициализации и для нас, проще отдать всё в руки создателя программы, нежели анализировать зависимости и самим организовывать инициализацию глобальных переменных.
Хотя, на досуге, мы подумаем над этим...
Дело в том, что статический член класса, по факту, является глобальной переменной, видимость которой, ограничена классом-владельцем.
Как и для всех глобальных переменных, порядок инициализации/деинициализации статических членов классов будет зависеть от порядка их размещения(объявления вне класса).
Кроме того, не редко требуется инициализация таких переменных значением + некоторым типам требуется явная инициализация (вызов конструктора с параметрами).
Некоторые программисты могут заложиться на порядок инициализации и для нас, проще отдать всё в руки создателя программы, нежели анализировать зависимости и самим организовывать инициализацию глобальных переменных.
Хотя, на досуге, мы подумаем над этим...
Некоторые выверты типа этого двойного объявления статического поля я не могу объяснить логически. Ну а MQ вынуждены следовать подмножеству стандарта С++.
Если у Вас несколько модулей, то второе объявление в С++ позволяет указать в каком именно модуле будет stаtic. Там static один на класс, что очень даже логично.
Чтобы критиковать С++ его нужно сначала изучить.
Если у Вас несколько модулей, то второе объявление в С++ позволяет указать в каком именно модуле будет stаtic. Там static один на класс, что очень даже логично.
Чтобы критиковать С++ его нужно сначала изучить.
Я С++ когда-то знал очень хорошо, но со временем все забывается. Поясните плз, следущее
1. Зачем переносить static в другой модуль?
2. Зачем мне нужно знать, где он расположен?
Только пожалуйста без сарказма и высокомерия, я и правда подзабыл тонкости языка.
Ну вот этот выверт " порядок инициализации/деинициализации статических членов классов будет зависеть от порядка их размещения(объявления вне класса)." ведь вообще ни в какие ворота не лезет. Это что - ассемблер?? С С++ много странных и ненужных фишек и хорошо, что они в MQL не перешли. Помню, как-то давно на собеседовании гоняли меня по этим фишкам, я тогда сказал товарищу, - вот честно, вы сами хоть раз это использовали?
Я С++ когда-то знал очень хорошо, но со временем все забывается. Поясните плз, следущее
1. Зачем переносить static в другой модуль?
2. Зачем мне нужно знать, где он расположен?
Только пожалуйста без сарказма и высокомерия, я и правда подзабыл тонкости языка.
//Test.h class A { static int a; } //----------------------- //Test1.cpp #include "Test.h" //----------------------- //Test2.cpp #include "Test.h" int A::a = 0; //static будет здесь в Test2.cpp
Переносить не нужно, нужно указать где он будет изначально
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте!
Помогите, пожалуйста разобраться в синтаксисе! Я вот так пишу:
и получаю ошибку при попытке обращения:
Сообщение об ошибке в заголовке темы:
А как правильно пользоваться статическими переменными классов?