Erreurs, bugs, questions - page 2256

 
Slava:

Corrigé depuis la version 1886.

Vous n'avez simplement pas vu les problèmes.

Lorsque nous avons ajouté les fonctions iTime, iOpen, iHigh etc, qui sont en fait des CopyTime, CopyOpen, CopyHigh etc dégénérés, nous avons vu qu'il y a des cas où les dernières données ne sont pas encore chargées et où les fonctions renvoient le résultat. Dans le cas des i-Fonctions, cela s'est avéré critique.

Tout devrait fonctionner correctement et rapidement maintenant. Attendez la version officielle.

Je l'ai, merci.
C'est-à-dire que la construction actuellement disponible est 1881 ? Ou ai-je manqué quelque chose ?
 
Nikolai Semko:
Je l'ai, merci.
Donc la construction actuelle disponible est 1881 ? Ou ai-je manqué quelque chose ?
Actuel disponible construire 1881
 

Erreur pendant l'exécution :

class A {
public:
        template<typename T>
        A* A::f( T )
        {
                int size = ArraySize( i ) + 1;
                Print( __FUNCTION__, ":", size );
                if ( ArrayResize( i, size ) == -1 )
                        Print( __FUNCTION__, ":Error:", GetLastError());
                return &this;
        }
        template<typename T>
        A* A::operator+( T t ) { return  f( t ); }
        int i[];
};
void OnStart()
{
        A a;
        a + 0 + 0;
}

Résultat : Attendu :

A::f<int>:1 A ::f<int>:1
A::f<int>:753790661 A::f<int>:2
A::f<int>:Error:4007

Autrement :

void OnStart()
{
        A a;
        a.f( 0 ).f( 0 );
}

OK. Quelle est la différence ? Pourquoi la taille du tableau est soudainement devenue 753790660 (au lieu de un) et par conséquent la mémoire s'est soudainement épuisée (4007) ? MT5\1881\32

De plus... Si nous supprimons littéralement trois caractères dans la première variante, le résultat sera également correct.

 
A100:

Erreur d'exécution :
Pourquoi la taille du tableau est-elle soudainement devenue 753790660 (au lieu de un) et donc soudainement à court de mémoire (4007) ? MT5\1881\32

MT5\1881\64
debug - tout est ok.
release - erreur de compilation "Internal compiler error".

 

Erreur de compilation :

class A {
        int A::f() { return NULL; } //нормально
        A  *A::g() { return NULL; } //Error: object of 'A' cannot be returned, copy constructor 'A::A(const A &)' not found
};
MT5\1881\32
 
A100:

Pourquoi écrire {} dans une classe comme celle-ci (: :)?

 

Erreur de compilation :

class A {
        int A::f();
        template <typename T>
        A*  A::g();
};
int A::f() { return NULL; } //нормально
template<typename T>
A*  A::g() { return NULL; } //Error: 'g' - function already defined and has different type
 
fxsaber:

Pourquoi écrire {} dans une classe comme celle-ci (: :)?

Pourquoi pas ?

class A {
        void A::f() {} //нормально
};
C'est à peu près comme ça... Je veux l'écrire... si je le veux, je ne le fais pas.
 
A100:

Pourquoi pas ?

Ce n'est pas une raison.

C'est un peu comme ça... Je veux écrire... si je le veux, je ne le fais pas.
Cela aide beaucoup à la lecture du code et évite les erreurs dans certaines situations.
 
fxsaber:

Ce n'est pas la raison.

Je n'impose pas une telle entrée, mais constate simplement des erreurs (y compris des erreurs d'exécution, même si la compilation était sans erreur) dans son utilisation, ce qui ne devrait pas être le cas
Raison: