Erro "Nem todos os caminhos de controle retornam um valor".

 

Olá, estou tentando codificar meu sistema, entretanto, após compilá-lo, devolvo o "nem todos os caminhos de controle retornam um valor" e quando eu faço um duplo clique ele mostra o seu no bloco seguinte, alguém poderia, por favor, apontar o problema.

Agradecemos antecipadamente

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:

Olá, estou tentando codificar meu sistema, entretanto, após compilá-lo, devolvo o "nem todos os caminhos de controle retornam um valor" e quando eu faço um duplo clique ele mostra o seu no bloco seguinte, alguém poderia, por favor, apontar o problema.

Agradecemos antecipadamente


Problema resolvido


Remover #Propriedade estrita

 
Siladeh:

Problema resolvido


Remover #Propriedade estrita


Isso é um trabalho ao redor, acrescente 1 linha extra

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


Isso é um trabalho ao redor, acrescente 1 linha extra


Obrigado, amigo.
 
Ou o mais simples:
return( sells>0 );
// if(sells>0) return(true);                
// else     return(false);  // Add this line
 

WHRoeder - Eu continuo tirando mais linhas do meu código graças às suas dicas. Eu teria feito exatamente o mesmo que o GumRai. Obrigado!

 
GumRai:


Isso é um trabalho ao redor, acrescente 1 linha extra


Olá GumRai, só para conversar, você não precisa de mais nada ali, certo? )

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

Olá, estou tentando codificar meu sistema, entretanto, após compilá-lo, devolvo o "nem todos os caminhos de controle retornam um valor" e quando eu faço um duplo clique ele mostra o seu no bloco seguinte, alguém poderia, por favor, apontar o problema.

Agradecemos antecipadamente

Você pode receber um aviso para OrderSelect se não verificar o 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 ajude

 
thrdel:


Olá GumRai, só para conversar, você não precisa de mais nada ali, certo? )


Não, você está certo.

WHRoeders postar acima do seu é ainda mais simples para alcançar a mesma coisa

 
GumRai:


Não, você está certo.

WHRoeders postar acima do seu é ainda mais simples para alcançar a mesma coisa


É verdade, mas apenas para situações particulares como esta. A outra forma é mais geral, independentemente de quantas e quais são as condições, se nenhuma delas retornar verdadeira, ela retornará falsa.

É, é preciso admitir, uma solução elegante para este exemplo em particular.

 
thrdel:

...

... e se você não usar :

Espero que ajude

Você não precisa adicionar -1, pois a condição é
i<OrdersTotal()
Se você acrescentar -1 você perde 1 item da matriz.