Error "No todas las rutas de control devuelven un valor".

 

Hola, estoy intentando codificar mi sistema sin embargo después de compilar me devuelve el "no todas las rutas de control devuelven un valor" y cuando hago doble clic me muestra su en el siguiente bloque, podría alguien indicarme el problema.

Gracias de antemano

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:

Hola, estoy intentando codificar mi sistema sin embargo después de compilar me devuelve el "no todas las rutas de control devuelven un valor" y cuando hago doble clic me muestra su en el siguiente bloque, podría alguien indicarme el problema.

Gracias de antemano


Problema resuelto


Quitar la #Propiedad estricta

 
Siladeh:

Problema resuelto


Eliminar la #Propiedad estricta


Esto es una solución, añadir una línea extra

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


Eso es una solución, añadir una línea extra


Gracias amigo
 
O la más sencilla:
return( sells>0 );
// if(sells>0) return(true);                
// else     return(false);  // Add this line
 

WHRoeder - Sigo quitando más líneas de mi código gracias a tus consejos. Yo habría hecho exactamente lo mismo que GumRai. Gracias.

 
GumRai:


Eso es una solución, añadir una línea extra


Hola GumRai, sólo por el bien de la conversación, que realmente no necesita la otra allí, ¿verdad? )

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

Hola, estoy intentando codificar mi sistema sin embargo después de compilar me devuelve el "no todas las rutas de control devuelven un valor" y cuando hago doble clic me muestra su en el siguiente bloque, podría alguien indicarme el problema.

Gracias de antemano

Es posible que reciba una advertencia para OrderSelect si no comprueba el resultado.

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);
  }


Espero que le sirva de ayuda

 
thrdel:


Hola GumRai, sólo por el bien de la conversación, que realmente no es necesario el más en allí, ¿verdad ? )


No, tienes razón.

El post de WHRoeders que está por encima del tuyo es aún más sencillo para conseguir lo mismo

 
GumRai:


No, tienes razón.

El post de WHRoeders que está por encima del tuyo es aún más sencillo para conseguir lo mismo


Cierto, pero sólo para situaciones particulares como ésta. La otra forma es más general, independientemente de cuántas y cuáles sean las condiciones, si ninguna de ellas devuelve true, devolverá false.

Hay que admitir que es una solución elegante para este ejemplo en particular.

 
thrdel:

...

y si no usas :

Espero que te sirva de ayuda

No es necesario añadir -1 ya que la condición es
i<OrdersTotal()
Si añades -1 pierdes 1 elemento del array.