错误、漏洞、问题 - 页 2697

 
Stanislav Korotky:

在一个函数内声明一个类?

没有模板,它也能发挥作用。

 
Bug MT5(build 2375)当使用函数的指针数组时,通过其指针调用函数时出现编译错误

#define  PRINT(x) ; Print(#x, ":", string(x))

void test(){
   PRINT(__FUNCSIG__);
}

template<typename T>
void call(T f_ptr){
   f_ptr();
}


template<typename T>
class A{
public:
   T arr_1[1];
   
   typedef void (*ff)();
   ff arr_2[1];  
   
   
   T test_1(){
      return arr_1[0];
   } 
   
   ff test_2(){
      return arr_2[0];
   } 
   
   T operator[](int index){
      return arr_1[index];
   }
};

void OnStart(){
   typedef void (*ff)();
   ff arr[1];
   arr[0] = test;   
   
   ff f_ptr = arr[0];
   f_ptr();             //Ok
   call(arr[0]);        //Ok
   arr[0]();            //Compile Error: ')' - expression expected   
   
   
   A<ff> a;             
   a.arr_1[0] = test;
   a.arr_2[0] = test;
   
   
   a.arr_1[0]();        //Compile Error: ')' - expression expected   
   a.arr_2[0]();        //Compile Error: ')' - expression expected   
   
   a.test_1()();        //Compile Error: ')' - expression expected   
   a.test_2()();        //Compile Error: ')' - expression expected   
   
   a[0]();              //Ok ???
}


 
Sergey Dzyublik:
MT5(build 2375)当使用函数的指针数组时,通过其指针调用函数时出现错误编译

一个非常古老的错误。

 

有什么建议吗--在MetaEditor打开的文件窗口中,它们的列表被保存在哪里,以便以后打开它们?

ME不时地从头打开,尽管在此之前已经打开了一堆文件。可能是由于更新。

我想手动备份列表,或者也许有其他的解决方案?

 
Aleksey Mavrin:

有什么建议吗--在MetaEditor打开的文件窗口中,它们的列表被保存在哪里,以便以后打开它们?

ME不时地从头打开,尽管在此之前已经打开了一堆文件。可能是由于更新。

我想手动备份列表,或者也许有其他的解决方案?

在注册表里有一个列表,在ini文件 "metaeditor.ini "里有一个列表,通过ME ==> 文件 - 打开数据文件夹(Ctrl + Shift + D) ==> 配置 ==> metaeditor.ini
你更有可能需要第二种。

 
fxsaber:

一个非常古老的错误。

我记得很肯定的是,有一次它照常工作。
我去检查了一下,又增加了一些从其数组中调用指针到一个函数的变体。

事实证明,当指向一个函数的数组在一个类里面,并且通过operator[]访问特定的数组元素时,一切都能正常工作。
同时,如果你使用一个普通的函数来访问一个元素,又会发生编译错误......这是一个奇迹...

 
有什么方法可以覆盖指标的自动重定比例吗?例如,假设在指标子窗口中有两个图表,是否有可能在一个图表上对垂直轴进行重新调整,而在第二个图表上不进行调整?这样,第二张图就不会影响重新缩放。
 
Bug MT5(build 2375),尽管在调用重载模板函数时进行了明确的专业化处理,但仍会调用默认模板函数,这导致了堆栈溢出。
C++在线(https://onlinegdb.com/BJTFdUDD8)
template<typename T>
void test(T &arr[], T value){
    printf("1");
};

template<typename T, typename TT>
void test(T* &arr[], TT* value){
    printf("2");
    test<T*>(arr, value);
};

class A{};

void OnStart(){
   void* arr[] = {};
   A* ptr;
   test(arr, ptr);         // result: 2,2,2,2,2,2,2,2,...    should be: 2, 1
}
 
bool s_sel = SymbolSelect("", true);
s_sel = true;

请纠正这一点。

 

工具提示只给出一个ENUM值。