class A { public:
virtualvoid f() { Print( __FUNCTION__ ); }
};
class B : public A { public:
virtualvoid f() { Print( __FUNCTION__ ); }
};
class H { public:
H( A* a ) { H::s[ 0 ] = a; }
staticvoid g();
static A* s[ 1 ];
};
A *H::s[ 1 ] = { 0 };
void H::g() { H::s[ 0 ].f(); } //еще обратил внимание, что в этом месте редактор выделяет (.f) зеленым
voidOnStart()
{
A* b = new B();
H h( b );
H::g(); //печатает A::f()
delete( b );
}
Cosa fare con gli spammer nel mercato? Mi sono lamentato, lo spammer è stato bannato per 24 ore, ora è stato unbannato, ma la sua merda è ancora lì. O è normale? La pagina di discussione del prodotto non è per il feedback dei clienti?
Errore di compilazione 358 in tutti i casi di chiamata h( A* a)
class A {
};
class B {
public:
B() : a1( NULL ), a2( NULL ), a3( NULL ), a4( NULL ) {}
void f() const {
h( a1 ); // не обоснована (1)
h( a2 ); // не обоснована (2)
h( a3 ); // обоснована (3)
h( a4 ); // обоснована (4)
}
A * a1;
A * const a2;
const A * a3;
const A * const a4;
};
void h( A* a )
{
}
È giustificato solo in (3) e (4) perché non è h( const A* a)
Una situazione simile è stata corretta in precedenza https://www.mql5.com/ru/forum/1111/page1218#comment_1058402 ma la ragione è probabilmente diversa poiché la presenza di const nella dichiarazione void f() const influenza il verificarsi dell'errore e non c'erano funzioni membro lì
Non compila nella build 976 (errore 358, ma differisce dagli errori precedentemente descritti nella build 975).
class A {};
struct S { int s; };
void h1( A* a ) {}
void h2( S& s ) {}
void h3( const S& s ) {}
class B {
public:
void f1() const { h1( this.a ); } //не обоснованная и возникла только в build 976
// void f2() const { h2( this.s ); } // обоснованная ошибка в build 976void f3() const { h3( this.s ); } //нормально
A* a;
S s;
};
La ragione potrebbe essere che la build 976 ha corretto l'errore relativo al fatto che una normale funzione chiamata da un metodo di classe const potrebbe modificare i membri della classe passati ad essa da un riferimento non-const&. Ma qui il puntatore è un membro della classe e il suo valore è garantito per non essere cambiato quando si chiama h( A* a), ma può essere cambiato solo quando si dichiara h( A* &a )
Non compila nella build 976 (errore 358, ma differisce dalla descrizione precedente in quanto nessun errore si è verificato nella build 975)
La ragione potrebbe essere che la build 976 ha corretto l'errore relativo al fatto che una normale funzione chiamata da un metodo di classe const potrebbe modificare i membri della classe passati ad essa da un riferimento non-const&. Ma qui il puntatore è un membro della classe e il suo valore è garantito per non essere cambiato quando si chiama h( A* a) ma può essere cambiato solo quando si dichiara h( A* &a )
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.
Un errore nel funzionamento delle funzioni virtuali
Risultato: A::f(), dovrebbe essere B::f()
Aiuto installare META TRADER 4 su OS MAVERICKS, SCARICATO TUTTI I PROGRAMMI, GIOCARE SU MAC, TUTTO NUOVO, QUALSIASI COSA Dà ERRORE.
/*moderatore: inviare il testo dell'errore come file*/
2 - Prima del debug.
3 - dopo.
Forse lì ci sono delle differenze, io non ci capisco niente)
Grazie mille)
Errore di compilazione
mentre const non dovrebbe seguire static
Inoltre, questa è una protezione fasulla, perché static è modificato dalla solita funzione h() e A::f() const non lo saprà nemmeno
Un errore nel funzionamento delle funzioni virtuali
Risultato: A::f(), dovrebbe essere B::f()
Errore di compilazione
mentre const non dovrebbe seguire static
Inoltre, questa è una protezione fasulla, perché static è modificato dalla solita funzione h() e A::f() const non lo saprà nemmeno
Errore di compilazione 358 in tutti i casi di chiamata h( A* a)
È giustificato solo in (3) e (4) perché non è h( const A* a)
Una situazione simile è stata corretta in precedenza https://www.mql5.com/ru/forum/1111/page1218#comment_1058402 ma la ragione è probabilmente diversa poiché la presenza di const nella dichiarazione void f() const influenza il verificarsi dell'errore e non c'erano funzioni membro lì
Non compila nella build 976 (errore 358, ma differisce dagli errori precedentemente descritti nella build 975).
La ragione potrebbe essere che la build 976 ha corretto l'errore relativo al fatto che una normale funzione chiamata da un metodo di classe const potrebbe modificare i membri della classe passati ad essa da un riferimento non-const&. Ma qui il puntatore è un membro della classe e il suo valore è garantito per non essere cambiato quando si chiama h( A* a), ma può essere cambiato solo quando si dichiara h( A* &a )Non compila nella build 976 (errore 358, ma differisce dalla descrizione precedente in quanto nessun errore si è verificato nella build 975)
La ragione potrebbe essere che la build 976 ha corretto l'errore relativo al fatto che una normale funzione chiamata da un metodo di classe const potrebbe modificare i membri della classe passati ad essa da un riferimento non-const&. Ma qui il puntatore è un membro della classe e il suo valore è garantito per non essere cambiato quando si chiama h( A* a) ma può essere cambiato solo quando si dichiara h( A* &a )