Fehler, Irrtümer, Fragen - Seite 2066

 
fxsaber:

Dies scheint das falsche Verhalten für die Sprache zu sein, da es die Möglichkeiten einschränkt.

Ich muss ein const-Feld als Struktur definieren. Ich dachte, der Kopieroperator würde funktionieren, aber der Compiler will stattdessen einen Konstruktor, weil die Syntax ähnlich ist. Aber das ist falsch.

Es ist richtig, weil es eindeutig ist (es ist immer ein Konstruktor in der Initialisierungsliste, kein Operator), aber es ist in anderer Hinsicht falsch:

struct S {
        S()                        { Print( __FUNCSIG__ ); }
        void operator=( const S& ) { Print( __FUNCSIG__ ); }
};
void OnStart()
{
        S s;
        S s1 = s;

}

Ergebnis:

void S::S() (1)
void S::S() (2)
void S::operator=(const S&) (3)

während C++ die Zeilen (2) und (3) nicht ausgibt und daher den fehlenden Kopierkonstruktor nicht durch eine Symbiose aus Standardkonstruktor und Zuweisungsoperator ersetzt

 

Wenn die Ressource eines BMP-Objekts gelöscht und dann neu erstellt wurde, sieht das BMP-Objekt seine Ressource nicht mehr. Hier liegt ein Fehler vor. Nun müssen Sie das Objekt löschen und neu erstellen.

 
fxsaber:

Wenn die Ressource eines BMP-Objekts gelöscht und dann neu erstellt wurde, sieht das BMP-Objekt seine Ressource nicht mehr. Hier liegt ein Fehler vor. Nun müssen Sie das Objekt löschen und neu erstellen.

Können Sie uns den Code zeigen? Warum müssen Sie eine Ressource löschen? Sie können sie überschreiben/verändern, ohne sie zu löschen.
 

Situation:

Eine Marktposition eines Expert Advisors eines Drittanbieters wurde erfolgreich durch OrderSelect(ticketNumber,SELECT_BY_TICKET) ausgewählt, und in der Schleife wird versucht, sie zu schließen (die Orderauswahl auf dem Ticket wurde vor der Schließungsversuchsschleife vorgenommen).


Ich erhalte eine Fehlermeldung:

2017.11.10 06:00:33.806 ExpertName EURCAD,H1: unknown ticket 1846978258 for OrderClose function

Das Ticket ist in Ordnung.


Es ist nur natürlich, dass unser EA diesen Auftrag selbständig abschließen kann, also

Bei jeder Schleifeniteration prüfen wir

if(OrderCloseTime()!=0) break;


was nicht zum gewünschten Ergebnis führt, und die Meldung über die falsche Ticketnummer wird alle 30 Male des Zyklus angezeigt.

Ein schlechtes Blatt oder ist es ein Fehler mit einem Verlust einer ausgewählten Bestellung?

Oder gibt die Fehlernummer die Situation/das Problem nicht genau wieder?


Aktualisierung:

Ich habe herausgefunden, dass die Position nicht durch den eigenen EA geschlossen wird, sondern durch den, den wir schließen.

Vor einem zyklischen Fehler 4108 erhalten wir jedoch einmalig den Fehler 3 (obwohl der Auftrag bereits abgeschlossen ist, bevor der Fehler 3 protokolliert wird).

 
Kirill Belousov:

Natürlich könnte der einheimische EA diesen Auftrag selbständig abschließen, also

Bei jeder Iteration der Schleife wird die Prüfung durchgeführt.

Wir müssen auch OrderSelect durchführen.

 
Andrey Barinov:
Können Sie mir den Code zeigen? Warum sollten Sie die Ressource löschen, wenn Sie sie erneut herunterladen/ändern können, ohne sie zu löschen.

Erneut geladen, natürlich ohne Löschen, ohne Probleme. Nach der Löschung Probleme.

#define  WIDTH 100
#define  ARGB(a,r,g,b)  ((uchar(a)<<24)|(uchar(r)<<16)|(uchar(g)<<8)|uchar(b))

bool Set( const string Name, const uint &Data[], const uint Width )
{
  return(ResourceCreate(Name, Data, Width, (Width == 0) ? ArraySize(Data) : ArraySize(Data) / Width, 0, 0, Width, COLOR_FORMAT_ARGB_NORMALIZE));
}

void Test( const string Name )  
{
  static uint Data[WIDTH * WIDTH];
  
  for (uchar i = 0; i < 100; i++)
  {
    ArrayInitialize(Data, ARGB(0xFF, i, i, 0));
    ArrayInitialize(Data, ARGB(0xFF, i, i, 0));
    
    Set(Name, Data, WIDTH);
    
    ChartRedraw();
    
    Sleep(50);
  }
  
  ResourceFree(Name);  
}

void OnStart()
{  
  const string ObjName = __FILE__;
  const string Name = "::" + ObjName;
  
  ObjectCreate(0, ObjName, OBJ_BITMAP_LABEL, 0, 0, 0);
  ObjectSetString(0, ObjName, OBJPROP_BMPFILE, Name);
  
  // Видна работа
  Test(Name);
  
  // Нет результата на экране
  Test(Name);
  
  ObjectDelete(0, ObjName);
}
 

Keine Nachrichten von

Systemmeldungen


Keinerlei Meldungen, einschließlich Produktnachricht, Produktverkauf, Bemerkungen des Moderators, Produktvalidierungsmeldung.

 
Vladislav Andruschenko:

Keine Nachrichten von

Systemmeldungen


Überhaupt keine. einschließlich , Produktnachricht, Produktverkauf, Moderationshinweise, Produktvalidierungsnachricht.

Guten Tag.

Der Fehler wurde behoben, wir müssen noch auf die Aktualisierung der Website warten.

Wir entschuldigen uns für die Unannehmlichkeiten.

 
Julia Test:

Guten Tag.

Der Fehler wurde behoben, wir müssen nur noch auf die Aktualisierung der Website warten.

Wir entschuldigen uns für die Unannehmlichkeiten.


Danke. Ich habe bereits auf die SD geantwortet :-) und warte...

P.S. Noch nie war es so ruhig wie jetzt.... direktes Schweigen .........

 
fxsaber:

Sie müssen auch OrderSelect durchführen.

Können Sie uns den Grund dafür nennen?

Wir haben erfolgreich einen Auftrag für ein Ticket ausgewählt.

Wir haben in Iteration 1 einen Schließbefehl gesendet.

Bei dieser Iteration #1 erhielten wir Fehler 3 (Ungültige Handelsparameter). Der Auftrag wurde dennoch abgeschlossen. Wie wurde sie geschlossen?

Dann erhalten wir bei Iteration 2 den Fehler 4108. Wir können ihn nicht mit OrderCloseTime!=0 schließen.


In welchem Stadium verlieren wir laut der Dokumentation die Verbindung zu dem durch das Ticket ausgewählten Auftrag?

Ist dies nicht ein Fall, in dem nach dem Senden des Abschlussbefehls der Auftrag hätte gesperrt werden müssen und der Fehler 139 anstelle von 4108 hätte erzeugt werden müssen?