Vladimir Simakov: Ho un presupposto che non ci sarà un lotto, per esempio 0,15. Almeno io non ne ho sentito parlare. Se lo farò, lo cambierò.
So che è improbabile, ma si vuole sempre la soluzione perfetta ))))
Ok, non è il problema più grande, ma mi sono creato un problema... Volevo un OOP perfetto, ma senza chiamate inutili e tutto era ottimale
Voglio avere 5 istanze della classe, ma ho bisogno di inizializzare i campi della classe una volta - contengono ambiente terminale, che non cambierà durante l'esecuzione del programma.
string Language;
Se dichiaro static string Language; - allora ci sarà un errore unresolved static variable 'A::Language'
Ecco un esempio
//+------------------------------------------------------------------+class A
{
public:
string Language;
A() { Print(__FUNCTION__); Language = TerminalInfoString(TERMINAL_LANGUAGE); }
};
//+------------------------------------------------------------------+class B:public A
{
public:
B() {Print(__FUNCTION__,Language); }
};
//+------------------------------------------------------------------+
B *arrB[5];
//+------------------------------------------------------------------+intOnInit()
{
for(int i=0; i<5; i++)
arrB[i] = new B;
return(INIT_SUCCEEDED);
}
Inizializzerò la stringa Language 5 volte in questo modulo - è sbagliato e non compilerà con i modificatori statici
e non c'è bisogno di avere 5 copie della variabile Lingua! - provato nella classe B a dichiarare un'istanza della classe - stessa cosa 5 Le variabili di lingua hanno
So che è improbabile, ma si vuole sempre la soluzione perfetta ))))
Ok, non è il problema più grande, ma mi sono creato un problema... Volevo un OOP perfetto, ma senza chiamate inutili e tutto era ottimale
Voglio avere 5 istanze della classe, ma ho bisogno di inizializzare i campi della classe una volta - contengono ambiente terminale, che non cambierà durante l'esecuzione del programma.
Se dichiaro static string Language; - allora ci sarà un errore unresolved static variable 'A::Language'
Ecco un esempio
Inizializzerò la stringa Language 5 volte in questo modulo - non è corretto, e non compila con i modificatori statici
Ma voglio avvolgere tutto in una classe - nel mio esempio ho la classe B e voglio 5 istanze di B, ma non voglio inizializzareLanguage 5 voltee quindi non voglio avere una variabileLanguage in ogni istanza
Ma voglio avvolgere tutto in una classe - nel mio esempio ho la classe B e voglio 5 istanze di B, ma non voglio inizializzareLanguage 5 voltee quindi non voglio avere una variabileLanguage in ogni istanza
Come posso sbarazzarmi dellalingua extra?
Ereditare. In questo modo sarà inizializzato solo una volta.
So che è improbabile, ma si vuole sempre la soluzione perfetta ))))
Ok, non è il problema più grande, ma mi sono creato un problema... Volevo un OOP perfetto, ma senza chiamate inutili e tutto era ottimale
Voglio avere 5 istanze della classe, ma ho bisogno di inizializzare i campi della classe una volta - contengono ambiente terminale, che non cambierà durante l'esecuzione del programma.
Se dichiaro static string Language; - allora ci sarà un errore unresolved static variable 'A::Language'
Ecco un esempio
Inizializzerò la stringa Language 5 volte in questo modulo - è sbagliato e non compilerà con i modificatori statici
e non c'è bisogno di avere 5 copie della variabile Lingua! - provato nella classe B a dichiarare un'istanza della classe - stessa cosa 5 Le variabili di lingua hanno
Vladimir Simakov: Quindi, ne avete bisogno o volete un campo comune per gli oggetti?
è difficile dire cosa voglio ))))
Lasciatemi provare a metterlo in parole:
- Voglio una classe che sia inizializzata dal costruttore e questa classe non avrà alcun metodo; lo scopo della classe è di aprire un ordine e poi chiudere e/o riaprire diversi altri ordini secondo uno script; il tipo di script è un'enumerazione
- Userò un array di istanze della classe - almeno 5
- Non voglio aprire l'ordine senza chiamare ogni volta l'ambiente terminale, quindi voglio usare SYMBOL_VOLUME_MAX, Symbol, SYMBOL_VOLUME_MIN e il numero di cifre in SYMBOL_VOLUME_STEP come valori costanti nella classe
- Voglio un uso ottimale delle variabili, cioè non voglio duplicare le costanti del paragrafo precedente.
Questo è circa come vedo il tutto, ma in generale, il problema è ora ridotto alla struttura corretta della classe stessa, come si è scoperto già devono ereditare, in modo che SYMBOL_VOLUME_MAX , Symbol,SYMBOL_VOLUME_MIN ... per avere una copia, penso che inciamperò ancora nell'output di errore, userò qualcosa come questo dal mio PrintLastError.mqhhttps://www.mql5.com/ru/code/24829#
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Ho un presupposto che non ci sarà un lotto, per esempio 0,15. Almeno io non ne ho sentito parlare. Se lo farò, lo cambierò.
So che è improbabile, ma si vuole sempre la soluzione perfetta ))))
Ok, non è il problema più grande, ma mi sono creato un problema... Volevo un OOP perfetto, ma senza chiamate inutili e tutto era ottimale
Voglio avere 5 istanze della classe, ma ho bisogno di inizializzare i campi della classe una volta - contengono ambiente terminale, che non cambierà durante l'esecuzione del programma.
string Language;Se dichiaro static string Language; - allora ci sarà un errore unresolved static variable 'A::Language'
Ecco un esempio
Inizializzerò la stringa Language 5 volte in questo modulo - è sbagliato e non compilerà con i modificatori statici
e non c'è bisogno di avere 5 copie della variabile Lingua! - provato nella classe B a dichiarare un'istanza della classe - stessa cosa 5 Le variabili di lingua hanno
2019.08.29 12:44:58.384 tst__ EURUSD,M15: inizializzato
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3
So che è improbabile, ma si vuole sempre la soluzione perfetta ))))
Ok, non è il problema più grande, ma mi sono creato un problema... Volevo un OOP perfetto, ma senza chiamate inutili e tutto era ottimale
Voglio avere 5 istanze della classe, ma ho bisogno di inizializzare i campi della classe una volta - contengono ambiente terminale, che non cambierà durante l'esecuzione del programma.
Se dichiaro static string Language; - allora ci sarà un errore unresolved static variable 'A::Language'
Ecco un esempio
Inizializzerò la stringa Language 5 volte in questo modulo - non è corretto, e non compila con i modificatori statici
2019.08.29 12:44:58.384 tst__ EURUSD,M15: inizializzato
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3
OK, questa è un'opzione
Ma voglio avvolgere tutto in una classe - nel mio esempio ho la classe B e voglio 5 istanze di B, ma non voglio inizializzareLanguage 5 voltee quindi non voglio avere una variabileLanguage in ogni istanza
Come faccio a sbarazzarmi dellalingua extra?
OK, questa è un'opzione
Ma voglio avvolgere tutto in una classe - nel mio esempio ho la classe B e voglio 5 istanze di B, ma non voglio inizializzare Language 5 volte e quindi non voglio avere una variabileLanguage in ogni istanza
Come posso sbarazzarmi dellalingua extra?
Ereditare. In questo modo sarà inizializzato solo una volta.
So che è improbabile, ma si vuole sempre la soluzione perfetta ))))
Ok, non è il problema più grande, ma mi sono creato un problema... Volevo un OOP perfetto, ma senza chiamate inutili e tutto era ottimale
Voglio avere 5 istanze della classe, ma ho bisogno di inizializzare i campi della classe una volta - contengono ambiente terminale, che non cambierà durante l'esecuzione del programma.
Se dichiaro static string Language; - allora ci sarà un errore unresolved static variable 'A::Language'
Ecco un esempio
Inizializzerò la stringa Language 5 volte in questo modulo - è sbagliato e non compilerà con i modificatori statici
e non c'è bisogno di avere 5 copie della variabile Lingua! - provato nella classe B a dichiarare un'istanza della classe - stessa cosa 5 Le variabili di lingua hanno
2019.08.29 12:44:58.384 tst__ EURUSD,M15: inizializzato
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3
Ereditare. In questa forma, sarà inizializzato solo una volta.
Funziona per me
2019.08.29 13:24:19.690 tst__ EURUSD,M15: inizializzato
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: MyTerminalInfoString
almeno myTerminalInfoString() è chiamato una volta
Quindi ho una specie di Singleton
Grazie!
Sono al telefono in questo momento. Ricordamelo in serata e ti mostrerò come risolverlo.
Ok, se non è troppo disturbo.
e il tema Singleton è abbastanza nuovo per me, c'è spazio per la creatività - esempi
Ok, se non è troppo disturbo.
e il tema Singleton è abbastanza nuovo per me, c'è spazio per la creatività - esempi
Quindi, ne avete bisogno o volete un campo comune per gli oggetti?
è difficile dire cosa voglio ))))
Lasciatemi provare a metterlo in parole:
- Voglio una classe che sia inizializzata dal costruttore e questa classe non avrà alcun metodo; lo scopo della classe è di aprire un ordine e poi chiudere e/o riaprire diversi altri ordini secondo uno script; il tipo di script è un'enumerazione
- Userò un array di istanze della classe - almeno 5
- Non voglio aprire l'ordine senza chiamare ogni volta l'ambiente terminale, quindi voglio usare SYMBOL_VOLUME_MAX, Symbol, SYMBOL_VOLUME_MIN e il numero di cifre in SYMBOL_VOLUME_STEP come valori costanti nella classe
- Voglio un uso ottimale delle variabili, cioè non voglio duplicare le costanti del paragrafo precedente.
Questo è circa come vedo il tutto, ma in generale, il problema è ora ridotto alla struttura corretta della classe stessa, come si è scoperto già devono ereditare, in modo che SYMBOL_VOLUME_MAX , Symbol,SYMBOL_VOLUME_MIN ... per avere una copia, penso che inciamperò ancora nell'output di errore, userò qualcosa come questo dal mio PrintLastError.mqhhttps://www.mql5.com/ru/code/24829#