Ошибки, баги, вопросы - страница 2210

[Удален]  

Зачем внутри CTrade::PositionModify указывается Magic ?

m_request.magic   =m_magic;

 

Ошибка компилятора:

struct S
{
   static int q;
   static int z;
};
int S::z = 5;
int z = 3;
int S::q = z;

void OnStart()
{
   Alert(S::q);
}

Alert: 3

 
pavlick_:

Ошибка компилятора:

А в  чем проблема? 
Используйте S::z, что бы получить другой результат.

struct S
{
   static int q;
   static int z;
};
int S::z = 5;
int z = 3;
int S::q = z;

void OnStart()
{
   Alert(S::q);
}

Alert: 3

 
Sergey Dzyublik:

А в  чем проблема? 
Используйте S::z, что бы получить другой результат.

3.4.1 Unqualified name lookup  [basic.lookup.unqual]

If a variable member of a namespace is defined outside of the scope of its namespace then any name that appears in the definition of the member (after the declarator-id) is looked up as if the definition of the member occurred in its namespace.

[Example:

namespace N {
int i = 4;
extern int j;
}
int i = 2;
int N::j = i;  // N::j == 4

end example]

 
pavlick_:

Все таки у нас MQL язык, а не С++. 
Если есть желание можете и на "работу" nested namespace в MQL пожаловаться, там тоже много чего от С++ отличается.

 
Sergey Dzyublik:

Все таки у нас MQL язык, а не С++.

А по делу сказать чего-нибудь можете? Где задокументирован поиск имён без квалификаторов? Из справки:

---------

Синтаксис

Синтаксически язык программирования торговых стратегий MQL5 очень похож на язык программирования С++, за исключением некоторых возможностей:

  • отсутствует адресная арифметика;
  • отсутствует оператор goto;
  • нельзя объявить анонимное перечисление;
  • нет множественного наследования.

------------

ни слова про unqualified name lookup, а это базовые вещи. Ну дело хозяйское в общем-то - изучать язык по сообщениям Рената, отсутствие документации и обратной совместимости, но тогда язык производит впечатление детской игрушки.

 
pavlick_:

А класс точно относится к namespace?

 
pavlick_:

А по делу сказать чего-нибудь можете? Где задокументирован поиск имён без квалификаторов? Из справки:

---------

Синтаксис

Синтаксически язык программирования торговых стратегий MQL5 очень похож на язык программирования С++, за исключением некоторых возможностей:

  • отсутствует адресная арифметика;
  • отсутствует оператор goto;
  • нельзя объявить анонимное перечисление;
  • нет множественного наследования.

------------

ни слова про unqualified name lookup, а это базовые вещи. Ну дело хозяйское в общем-то - изучать язык по сообщениям Рената, отсутствие документации и обратной совместимости, но тогда язык производит впечатление детской игрушки.

поддерживаю, уже назрело отказаться от справки в сторону правил языка, т.к. по сути mql5 это уже другой язык программирования

 
Konstantin:

поддерживаю, уже назрело отказаться от справки в сторону правил языка, т.к. по сути mql5 это уже другой язык программирования

А разве где-то говорили что-то обратное???

 
Alexey Navoykov:

А класс точно относится к namespace?

Да, вы правы, это относится именно к namespace. Для классов есть отдельный пункт, ну суть та же:

9.2.3.2  Static data members
[class.static.data]
2. The declaration of a non-inline static data member in its class definition is not a definition and may be of
an incomplete type other than cv void. The definition for a static data member that is not defined inline
in the class definition shall appear in a namespace scope enclosing the member’s class definition. In the
definition at namespace scope, the name of the static data member shall be qualified by its class name using
the :: operator. The initializer expression in the definition of a static data member is in the scope of its class (3.3.7).

[Example:
class process {
static process* run_chain;
static process* running;
};
process* process::running = get_main();
process* process::run_chain = running;

The static data member run_chain of class process is defined in global scope; the notation process::run_chain specifies that the member
run_chain is a member of class process and in the scope of class process. In the static data member definition, the
initializer expression refers to the static data member running of class process. — end example]