Fehler, Irrtümer, Fragen - Seite 1967

 
Комбинатор:
Es ist in Ordnung, wenn Sie es kompilieren und unter den Profis laufen lassen können.)

Ich verstehe nicht wirklich, was daran falsch sein soll. Alles funktioniert.

template<typename T>
void f() { }

template<>
void f<int>() { }

int _tmain(int argc, _TCHAR* argv[])
{
  f<double>();
  f<int>();

  return 0;
}
 
Alexey Navoykov:

Ich verstehe nicht wirklich, was daran falsch sein soll. Alles funktioniert.

Okay, ich bin der Dumme.
 

Ja, das ist etwas, das ich bereits entdeckt habe. Aber das Problem ist (war), dass in der Quelle dieses memeber tatsächlich ein Array ist, und ich beschlossen, mit dem Skalar zuerst der Einfachheit halber zu behandeln. Für das Array funktioniert derselbe Trick jedoch nicht. Ich musste das Array statisch innerhalb der Mitgliedsfunktion ziehen.

 
Stanislav Korotky:

Der gleiche Trick funktioniert jedoch nicht für ein Array. Ich musste das Array statisch innerhalb der Mitgliedsfunktion ziehen.

Dies ist bereits ein Compiler-Fehler - wir sollten Service Desk informieren

template<typename T>
struct A {
        static int i[];
};
template<typename T>
int A::i[]; //error: '[' - unexpected token
 

Baujahr 1650. Wenn mehrere .ex5-Module verlinkt sind (main und library), dann geht gar nichts mehr. Überall gibt es einen Fehler der Form:

2017.08.18 01:49:59.759 Zeichnung (USDJPY,H1) Kann 'xxx' in 'yyyy.ex5' nicht finden

Vorher hat alles gut funktioniert. Auch jetzt, beim Kompilieren von MetaEditor 1646 + MetaTrader 1650, funktioniert alles

Offensichtlich liegt ein Fehler in MetaEditor 1650 vor, während .ex5-Dateien fast doppelt so dünn sind. Warum solche Experimente?

 

Hinzufügen von Code

//Test.mqh
class A {};
class B { public:
        B() { f(); }
        A *g() { return NULL; }
void f()
{
        void *x = g();
        if ( true )
                return; 
        delete x; //в build 1650 не работает даже если до delete никогда (!) не доходит
                   //а ошибка при выполнении возникает именно из-за наличия этой строки
                   //и указатель в исходном коде действительный (есть проверка)
}
};

//Test.mq5
#include "Test.mqh"
#import "Test2.ex5"
        A *f();
#import
void OnStart()
{
        f();
}
//Test2.mq5
#property library
#include "Test.mqh"
static B b;
A *f() export { return NULL; }

Das Ergebnis finden Sie im vorherigen Beitrag

 
Ein weiteres Beispiel zur Überprüfung
//Test.mq5
class A;
#import "Test2.ex5"
        A *f();
        void g( A* );
#import
void OnStart() //вариант 1
{
        f(); /*возвращаемое значение не используется*/
}
//Test2.mq5
#property library
class A {};
static A *a;
A *f()       export { /*делает что-то полезное*/; return a; }

void g( A* ) export { /*делает что-то полезное*/; }

Die Bibliothek ist allgemeiner Natur. Übrigens wird der zurückgegebene f()-Zeiger in diesem Fall nicht verwendet - Option 1 (kann aber verwendet werden - siehe Option 2 unten). Beim Kompilieren von Test.mq5 gibt es keine Fehlermeldungen - das bedeutet, dass der Compiler die Klasse (A) nicht zu definieren braucht. Bei der Ausführung tritt jedoch ein Fehler auf: Cannot find 'f' in 'Test2.ex5'.

Weiter

void OnStart() //вариант 2
{
        g( f()/*возвращаемое значение используется*/);
}
 
Können Sie mir sagen, ob es möglich ist, in den Testergebnissen den relativen Drawdown anstelle des maximalen Drawdowns anzugeben? Aber oft liegt der maximale Verlust bei 3-5% und der relative Verlust erreicht 50%. Und um den relativen Drawdown zu sehen, sollte er separat getestet werden. Vielen Dank im Voraus
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
 
 
Vladimir Pastushak:

Die Windows-Sprache muss geändert werden, um glücklich zu sein...