Fehler "Nicht alle Kontrollpfade liefern einen Wert".

 

Hallo, ich versuche, mein System zu codieren, aber nach dem Kompilieren gibt es die "nicht alle Kontrollpfade einen Wert zurück" und wenn ich doppelklicken, zeigt es seine in den folgenden Block, könnte jemand bitte auf das Problem hinweisen.

Ich danke Ihnen im Voraus

bool CalculateCurrentSellOrders(string symbol)
  {
   int sells=0;
   for (int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_SELL) sells++;
        }
      }
   if(sells>0) return(true);
  }
 
Siladeh:

Hallo, ich versuche, mein System zu codieren, aber nach dem Kompilieren gibt es die Meldung "nicht alle Kontrollpfade geben einen Wert zurück" und wenn ich doppelklicke, zeigt es, dass es im folgenden Block ist, könnte jemand bitte das Problem aufzeigen.

Vielen Dank im Voraus


Problem gelöst


Entfernen Sie #Property strict

 
Siladeh:

Problem gelöst


#Eigenschaft strict entfernen


Das ist ein Workaround, fügen Sie 1 zusätzliche Zeile hinzu

   if(sells>0) return(true);
   else     return(false);  // Add this line
 
GumRai:


Das kann man umgehen, indem man 1 zusätzliche Zeile hinzufügt


Danke, Kumpel
 
Oder noch einfacher:
return( sells>0 );
// if(sells>0) return(true);                
// else     return(false);  // Add this line
 

WHRoeder - Dank Ihrer Tipps entferne ich immer mehr Zeilen aus meinem Code. Ich hätte genau dasselbe getan wie GumRai. Danke!

 
GumRai:


Das kann man umgehen, indem man 1 zusätzliche Zeile hinzufügt


Hallo GumRai, nur um der Unterhaltung willen, du brauchst das "else" dort nicht wirklich, oder? )

   if(sells>0) return(true);
   return(false); 
 
Siladeh:

Hallo, ich versuche, mein System zu codieren, aber nach dem Kompilieren gibt es die "nicht alle Kontrollpfade einen Wert zurück" und wenn ich doppelklicken, zeigt es seine in den folgenden Block, könnte jemand bitte auf das Problem hinweisen.

Vielen Dank im Voraus

Sie können eine Warnung für OrderSelect erhalten, wenn Sie das Ergebnis nicht überprüfen.

bool CalculateCurrentSellOrders(string symbol)
  {
   int sells=0;
   for (int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
        Print("OrderSelect() failed with error : "+GetLastError());
      if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MAGICMA)continue;
      if(OrderType()==OP_SELL) sells++;
     }
   if(sells>0) return(true);
   return(false);
  }


Ich hoffe es hilft

 
thrdel:


Hallo GumRai, nur um der Unterhaltung willen, du brauchst das "else" nicht wirklich, oder? )


Nein, du hast recht.

WHRoeders Beitrag über Deinem ist sogar noch einfacher, um das Gleiche zu erreichen

 
GumRai:


Nein, Sie haben Recht.

WHRoeders Beitrag über dem Ihren ist sogar noch einfacher, um das Gleiche zu erreichen


Stimmt, aber nur für bestimmte Situationen wie diese. Der andere Weg ist allgemeiner: Unabhängig davon, wie viele und welche Bedingungen es gibt, wenn keine von ihnen wahr ist, wird falsch zurückgegeben.

Ich muss zugeben, dass es eine elegante Lösung für dieses spezielle Beispiel ist.

 
thrdel:

...

und wenn Sie nicht verwenden :

Ich hoffe, es hilft

Sie brauchen -1 nicht hinzuzufügen, da die Bedingung lautet
i<OrdersTotal()
Wenn Sie -1 hinzufügen, fehlt 1 Element des Arrays.