Я хотел бы иметь возможность разбивать классы в MQL4 по файлам, то есть на определение в файле include / .mqh и реализацию в файле библиотеки / .mq4. Как мы это делаем - я продолжаю получать ошибки компиляции («имя-функции должно иметь тело»)?
Например, я могу взять подмножество кода в https://docs.mql4.com/basis/oop/class_templates и поместите определение в файл .mqh:
#import "library.ex4"
//+------------------------------------------------------------------+
//| Class for a free access to an array element |
//+------------------------------------------------------------------+
template<typename T>
class TSafeArray
{
protected:
T m_array[];
public:
//--- operator for accessing the array element by index
T operator[](int index);
};
#import
и поместите реализацию в файл .mq4 (называемый library.mq4):
#property library
//+------------------------------------------------------------------+
//| Receiving an element by index |
//+------------------------------------------------------------------+
template<typename T>
T TSafeArray::operator[](int index)
{
static T invalid_value;
//---
int max=ArraySize(m_array)-1;
if(index<0 || index>=ArraySize(m_array))
{
PrintFormat("%s index %d is not in range (0-%d)!",__FUNCTION__,index,max);
return(invalid_value);
}
//---
return(m_array[index]);
}
Это было задано ранее, но Основной ответ поместить определение и реализацию в файл .mqh: Как правильно определить MQL4 "#import of stati c методы класса"? . Есть ли способ обойти это?