Errori, bug, domande - pagina 1495

 
Karputov Vladimir:
Smettete di fare domande per conto di abbonati immaginari (o fittizi). Se un abbonato ha una domanda, che la faccia lui stesso. Altrimenti lo considererò come una pubblicità del segnale.
Temo che mi abbia frainteso, il mio segnale non ha bisogno di pubblicità da molto tempo. Cerco di capire gli aspetti tecnici del servizio che uso. Tuttavia, sono il primo ad essere avvicinato.
 
Artem Prischepa:
Temo che mi abbia frainteso, il mio segnale non ha bisogno di pubblicità da molto tempo. Cerco di capire gli aspetti tecnici del servizio che uso per conto mio. Tuttavia, sono il primo ad essere avvicinato.
In questo caso studiate le domande nelleFAQ sul servizio Signals(primo post).
 

È un bug o la mia scarsa comprensione della lingua:

void Func( int & Tmp )
{
  return;
}

void OnStart( void )
{
  int Tmp1, Tmp2;
  
  Func((0 > 1) ? Tmp1 : Tmp2); // '?' - parameter passed as reference, variable expected 
    
  return;
}
 
zaskok3:

Questo è un bug o la mia scarsa comprensione della lingua:

Il risultato di un'espressione ternaria è il contenuto della variabile Tmp1 o della variabile Tmp2.

E la funzione Func non dovrebbe passare il risultato dell'espressione, come hai fatto tu, ma un riferimento

 

Come posso affrontare questo problema?

Dopo aver installato l'Expert Advisor sul grafico che costruisce i grafici RENCO, il terminale si blocca permanentemente.

Riavviare il terminale non aiuta. Ho cancellato l'Expert dalla cartella - non è servito!

Cosa fare?

win7/64 mt4/950

 
Slawa:

Il risultato di un'espressione di operazione ternaria è il contenuto della variabile Tmp1 o della variabile Tmp2.

È il contenuto e non la variabile stessa? È qui che probabilmente è apparsa la mia scarsa comprensione. Grazie!

Ho provato l'alternativa ternaria e non ha funzionato:

//  Func((0 > 1) ? Tmp1 : Tmp2); // '?' - parameter passed as reference, variable expected
  
  // Так не пашет
  (0 > 1) ? Func(Tmp1) : Func(Tmp2); // 'Func' - expression of 'void' type is illegal
  
  // Так, конечно, работает
  if (0 > 1)
    Func(Tmp1);
  else
    Func(Tmp2);

Il ternario qui è senza assegnazione.

 
zaskok3:

Esattamente il contenuto, non la variabile stessa? A quanto pare, è qui che si è manifestata la mia scarsa comprensione. Grazie!

Ho provato l'alternativa ternaria, non ha funzionato:

Ternario qui senza assegnazione, però.

Il risultato di un'operazione ternaria è o il risultato della prima espressione o il risultato della seconda espressione, a seconda del risultato dell'espressione condizionale.

Il risultato deve essere assegnato da qualche parte (o essere un membro di un'altra espressione) perché è rvalue

Questo è più o meno lo stesso che scrivere semplicemente

int a=1;
int b=2;

a + b;
 

Slawa:

Il risultato deve essere assegnato da qualche parte (o essere un membro di un'altra espressione) perché è un rvalore

Questo è più o meno lo stesso che scrivere semplicemente

Se sostituisco void Func con int Func, allora è davvero lo stesso risultato. È un peccato con il vuoto. È solo per la frase evidenziata?
 
zaskok3:
Se sostituisco void Func con int Func, il risultato è effettivamente lo stesso. Il vuoto è una seccatura. È solo per la frase evidenziata?
 
Slawa:
Capito. Grazie per l'educazione!