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

[Удален]  
fxsaber # : Спасибо. С таким путем размещения советника работает. А с таким - нет. Похоже, зависит от длины пути к советнику.

Какова полная длина пути на вашей стороне?

Мой путь к файлу ... " "C:\Trading\MetaQuotes\MetaTrader 5\MQL5\Experts\Examples\MACD\SpyEA.ex5" "

What is the full path lebgth on your end?

My file path is ... " "C:\Trading\MetaQuotes\MetaTrader 5\MQL5\Experts\Examples\MACD\SpyEA.ex5" "

[Удален]  
fxsaber # : Thank you. This way of placing the advisor works. But with this one, no. It seems to depend on the length of the path to the advisor.
Возможно, это поможет вам решить проблему. Я использую следующую модификацию реестра, чтобы разрешить длинные пути длиной более 260 символов в Windows...
Maybe this can help you resolve the issue. I use the following Registry modification to allow long paths greater the 260 characters on Windows ...
How to Make Windows 10 Accept File Paths Over 260 Characters
How to Make Windows 10 Accept File Paths Over 260 Characters
  • 2023.08.22
  • www.howtogeek.com
Before Windows 95, file names could only be 8 characters long, but now Windows has a 260 character limit for the full path of a file. The Windows 10 Anniversary Update allowed users to abandon the 260 character limit, but some older 32-bit applications may not support longer paths. Home users can remove the path limit by editing the registry...
 
Fernando Carreiro #:

Какова полная длина пути на вашей стороне?

"c:\Program Files\MetaTrader 5\MQL5\Experts\Examples\MACD\SpyEA.ex5" 


Похоже, разобрался.

У меня старый ex5 индикатора лежал в той же папке, где и советник.

И советник пытался подключить этот индикатор, а не тот, который лежит в папке Indicators.


Спасибо за помощь!

[Удален]  
fxsaber #: Похоже, разобрался. У меня старый ex5 индикатора лежал в той же папке, где и советник. И советник пытался подключить этот индикатор, а не тот, который лежит в папке Indicators. Спасибо за помощь!
👍
 
В одном случае есть ошибка при компиляции, а в другом - нет
class A {
static int i[];
};
int    i[] {1,2,3}; //(1)//нормально
int A::i[] {1,2,3}; //(2)//Error: '{' - semicolon expected

А какая принципиальная разница между ними?

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Vladislav Boyko, 2023.12.12 15:25

class A {
public:
    A( const A& )         {}
    A( int i, int j = 0 ) {}
};
A f() { return new A(1); }

void OnStart()
  {
   Alert(EnumToString(CheckPointer(GetPointer(f()))));
  }
2023.12.12 17:23:45.523 test2 (EURUSD,H4)       Alert: POINTER_AUTOMATIC
2023.12.12 17:23:45.523 test2 (EURUSD,H4)       1 undeleted objects left
2023.12.12 17:23:45.523 test2 (EURUSD,H4)       1 object of type A left
2023.12.12 17:23:45.523 test2 (EURUSD,H4)       32 bytes of leaked memory

return изменил тип указателя, судя по всему. Получается утечка памяти при POINTER_AUTOMATIC.


Я глупость написал. Все правильно работает, там 2 объекта создается

class A
  {
private:
   string getMyPtrTypeStr() { return(EnumToString(CheckPointer(GetPointer(this)))); }
public:
   ~A()                     { Print("destructor ", getMyPtrTypeStr());             }
   A( const A& )            { Print("constructor#1, ", getMyPtrTypeStr());         }
   A( int i, int j = 0 )    { Print("constructor#2, ", getMyPtrTypeStr());         }
  };

A f() { return new A(1); }

void OnStart()
  {
   f();
  }
2023.12.14 19:06:37.975 test2 (EURUSD,H4)       constructor#2, POINTER_DYNAMIC
2023.12.14 19:06:37.975 test2 (EURUSD,H4)       constructor#1, POINTER_AUTOMATIC
2023.12.14 19:06:37.975 test2 (EURUSD,H4)       destructor POINTER_AUTOMATIC
2023.12.14 19:06:37.975 test2 (EURUSD,H4)       1 undeleted objects left
2023.12.14 19:06:37.975 test2 (EURUSD,H4)       1 object of type A left
2023.12.14 19:06:37.975 test2 (EURUSD,H4)       32 bytes of leaked memory
 
Vladislav Boyko #:

Я глупость написал. Все правильно работает, там 2 объекта создается

Автор, видимо, хотел получить на выходе POINTER_AUTOMATIC без необходимости делать delete.

 
fxsaber #:

Автор, видимо, хотел получить на выходе POINTER_AUTOMATIC без необходимости делать delete.

Автор я, я свой пост из кармана вытащил😄

Я просто хотел посмотреть, что произойдет, если запихнуть туда new, но не подумал о том, что объекта будет 2.


Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2023.12.12 09:03

Это не аргумент - тем более, что так все нормально:

class A {
public:
    A( const A& )         {} //(1)
    A( int i, int j = 0 ) {} //(2)
    A( bool )             {} //(3)
};
A f() { return 1; } //нормально

А что принципиально изменилось по сравнению с первоначальным вариантом ?

Ниндзя-конструкция при компиляции не дружит с параметром, для которого есть умолчательное значение. Не смотря на то, что A(bool) все равно не будет вызван, компилятор смотрит именно туда, судя по всему.

Без параметра со значением по умолчанию все работает (если убрать конструктор A(bool) тоже)

class A {
private:
   string getMyPtrTypeStr() { return(EnumToString(CheckPointer(GetPointer(this)))); }
public:
    ~A()                   { Print("destructor ", getMyPtrTypeStr());             }
    A(const A&)            { Print("constructor(const A&), ", getMyPtrTypeStr()); }
    A(int)                 { Print("constructor(int), ", getMyPtrTypeStr());      }
    A(bool)                { Print("constructor(bool), ", getMyPtrTypeStr());     }
};

A f1() { return 1;    } // constructor(int)
A f2() { return true; } // constructor(bool)

 
Vladislav Boyko #:

Ниндзя-конструкция

Эту имел в виду.

 
Ошибка при компиляции:
class A {
    struct B {
        int b;
    } bb = { 1 }; //Error: '=' - illegal assignment use
};