IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème et AVC : _wfopen_s


Sujet :

C++

  1. #1101
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 390
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 390
    Par défaut
    Pour l'opérateur =, je recommanderais l'idiome copy-and-swap plutôt que ce code qui vide la liste sur-place et la re-peuple.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  2. #1102
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 428
    Par défaut
    J'ai tenté mais avec les "InfosVisionnage" qui se transforment en "SequenceVisionnage", j'ai pas réussi à factoriser le code via l'idiome copy-and-swap.

  3. #1103
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 782
    Par défaut
    Remarques sur les codes "Janvier 11" et "Janvier 12" :
    https://github.com/laurentbouleau/Exemple : Février 01 (06/02/2025)

    Note : film_serie.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::vector<std::wstring> extraire_Titres_Depuis_UneLigne(std::wstring& ligne)
    { // Titres
    //    assert(ligne.length() > 0 && L"Nom de titres vide"); // ??? pour Mot de... ?
        std::wstring& t = ligne;
    ...
    Nom : Capture d’écran 2025-02-06 224842.png
Affichages : 150
Taille : 41,7 Ko

    Voilà !

    Remarques sur les codes "Janvier 13"
    Plus tard !!!

  4. #1104
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 428
    Par défaut
    Remarques sur les codes "Janvier 13"
    Plus tard !!!
    Vous devriez prendre en compte nos remarques le plus vite possible.
    Là, avec votre approche, vous naviguez entre vos nouveaux et anciens "problèmes".
    Les remarques les plus récentes ont déjà intégré vos boulettes passées.
    Plutôt que d'effacer et refaire les mêmes erreurs, prenez en compte TOUTES nos remarques.

    Pourquoi vous ne supprimez pas tous ces "const void" ???
    Les modifications faites sont des retours à "avant", donc ok ou pas en fonction des remarques qu'on vous a déjà fait, mais que vous ne voulez pas traiter "tout de suite".
    On tourne en rond.
    Exemple :
    Vous ressuscitez le champ "m_numero" de la classe SequenceVisionnage au lieu de ressusciter le champ "m_NumeroEpisode".
    Vous nous collez des variables statiques n'importe où n'importe comment par "palier" un "problème" dont on vous a déjà donné la solution via les opérateurs d'affectation (je vous accorde que c'est assez complexe à appréhender)

    Cela fait qu'on a l'impression d'un éternel retour à la case de départ.

    Vous avez de mauvaises habitudes (les "const void", utilisation de statique, passer "trop" de paramètre à vos fonctions membres, ne pas simplifier votre code dés que possible, etc...)
    Il faut commencer par vaincre ces mauvaises habitudes.

    J'ai l'impression que j'ai, par mes remarques, cassé votre réflexion/esprit critique, car, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    void Serie::PostTraitement()
    {
        //    std::list<Saison> m_hors_saisons;
        //    std::list<Saison> m_non_hors_saisons;
     
        for (auto& saison : saisons)
        {
            if (saison.m_hors_saison)
            {
     
                m_hors_saisons.emplace_back(move(saison));
            }
            else
            {
                m_non_hors_saisons.emplace_back(move(saison));
            }
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    void Serie::Print_Saisons()
    {
        std::list<Saison*> hors_saisons;
        std::list<Saison*> non_hors_saisons;
        for (auto& saison : saisons)
        {
            if (saison.m_hors_saison)
            {
                hors_saisons.emplace_back(&saison);
            }
            else
            {
                non_hors_saisons.emplace_back(&saison);
            }
        }
    
        for (auto psaison : hors_saisons)
        {
            psaison->Print();
        }
    
        for (auto psaison : non_hors_saisons)
        {
            psaison->Print();
        }
    }
    C'est bien 2 codes pour faire la même chose, mais vous gardez les 2, pourquoi ?
    Avec un peu de recul, il est claire que ce code n'a rien à faire dans "Serie:: Print_Saisons".

    Remarque sur la notation hongroise : "psaison" avec "p" pour "pointeur", c'est une très mauvaise idée. (Il n'y a que "m_" qui doit être utilisé, le reste POUBELLE)
    En plus c'est pas du tout des pointeurs, mais des itérateurs.

    Si c'est trop compliqué, posez des questions. Ne copiez pas bêtement le code.
    J'ai l'impression que vous n'avez plus aucun maitrise "logique" de votre code.
    Sinon, vous n'auriez jamais mis ce code dans "Serie:: Print_Saisons".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static std::wstring ch;
    Arrêtez avec ces "solutions" de contournement foireuses.
    Si vous ne comprenez pas, DEMENDEZ !!!

    Question bête : Pouvez-vous succinctement indiquer l'utilité d'une classe, SVP ?

    Donc, implémentez tout de suite les opérateurs d'affectation et les constructeurs pour ne plus supporter ces conneries de statiques, SVP.

  5. #1105
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 782
    Par défaut
    https://github.com/laurentbouleau/Exemple : Février 02 (07/02/2025)

    const void ===> void : ok !
    Mais : const void AffichagePersonnaliser(AffichagePersonnalisation perso); ou pas ???

    Nom : Capture d’écran 2025-02-07 215410.png
Affichages : 139
Taille : 31,0 Ko

    C'est bien 2 codes pour faire la même chose, mais vous gardez les 2, pourquoi ?
    Avec un peu de recul, il est claire que ce code n'a rien à faire dans "Serie:: Print_Saisons".

    Remarque sur la notation hongroise : "psaison" avec "p" pour "pointeur", c'est une très mauvaise idée. (Il n'y a que "m_" qui doit être utilisé, le reste POUBELLE)
    En plus c'est pas du tout des pointeurs, mais des itérateurs.
    Donc ???

    Si c'est trop compliqué, posez des questions. Ne copiez pas bêtement le code.
    J'ai l'impression que vous n'avez plus aucun maitrise "logique" de votre code.
    Sinon, vous n'auriez jamais mis ce code dans "Serie:: Print_Saisons".
    Ben oui !!! Compliqué et pas compris !

    Arrêtez avec ces "solutions" de contournement foireuses.
    Si vous ne comprenez pas, DEMENDEZ !!!
    Ben oui !!! Comment faire ?

    Question bête : Pouvez-vous succinctement indiquer l'utilité d'une classe, SVP ?
    C oui, un peu !
    C++ :

    Donc, implémentez tout de suite les opérateurs d'affectation et les constructeurs pour ne plus supporter ces conneries de statiques, SVP.
    Je suis crevé !!!

    Remarques sur les codes "Janvier 13"
    Plus tard !!!



    Comment faire ???

  6. #1106
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 428
    Par défaut
    const void ===> void : ok !
    Vous ne l'avez fait que dans les fichiers serie.cpp/.h, vous pouvez le faire dans tous les fichiers sources.
    "const void" n'est JAMAIS valide. Le compilateur est vraiment "trop gentil" avec vous.

    Mais : const void AffichagePersonnaliser(AffichagePersonnalisation perso); ou pas ???
    C'est encore plus vrai sur cette fonction, car, en plus, elle modifie les champs de l'instance de la classe, donc rien de "const"ant.
    On ne peut même pas "justifier cette erreur" en ayant inversé malencontreusement "const TypeDeRetout MaFonctionQuiNeModifiePasLInstance()" et "TypeDeRetout MaFonctionQuiNeModifiePasLInstance() const".
    Car "AffichagePersonnaliser" modifie l'objet associé, donc l'objet ne peut être constant si l'on appelle cette fonction. On ne peut pas appeler cette fonction si l'objet a été indiqué comme constant.

    Vous devez comprendre à quoi sert le mot-clé "const", RAPIDEMENT.

    Donc ???
    J'ai peut-être été un peu imprécis.
    ce code n'a rien à faire dans "Serie:: Print_Saisons".
    C'est le code qui est à la fois dans la fonction "Serie:: PostTraitement" et dans la fonction "Serie:: Print_Saisons".
    La fonction "Serie:: Print_Saisons" est donc "utile", mais c'est tout le début qui ne sert à rien.

    J'ai modifié mon précédent post pour mettre en bleu la partie qui doit rester : celle qui affiche les Saisons, d'où le nom de la fonction.
    Je vous rabâche de nommer "correctement" vos fonctions/variables/etc..., c'en est une illustration ici.
    Si vous nommez correctement vos fonctions, vous implémentez ce qu'indique leur nom, et donc le contenu de la fonction vient "tout seul".
    Attention à remplacer les "hors_saisons" par "m_hors_saisons" et "non_hors_saisons" par "m_non_hors_saisons" : encore une fois les noms, et ici le préfixe "m_", ont un sens, qui devrait vous permettre de comprendre comment faire les choses dans la fonction.

    Ce que montre cette mauvaise interprétation de ma réponse, c'est que vous n'avez pas pris le recul nécessaire. Personne n'a la connaissance infuse, mais vous devez vous renseignez un peu par vous-même, non ?

    Question bête : Pouvez-vous succinctement indiquer l'utilité d'une classe, SVP ?
    C oui, un peu !
    C++ :
    C'est ce que je craignais.
    Ça fait quand même un bout de temps qu'on se traine des classes, faut commencer un peu à se bouger quand une chose n'est pas claire.

    En C, les classes, ça n'existe pas. Le truc le plus proche, c'est les structures.
    Confondez-vous les structures C et les classes/structures C++ ?
    En première approximation, on peut considérer qu'une classe C++, c'est une structure C avec les fonctions qui permettent de s'en servir efficacement (constructeur pour l'initialiser correctement, des fonctions qui manipulent les champs de la structure, etc...).
    Mais c'est juste pour ce faire une idée.
    Une classe, c'est un regroupement de services qui sont logiquement "liés".
    Une classe Episode, c'est une classe qui permet d'avoir des fonctions qui tournent autours d'un Episode.
    Actuellement, les services qu'offrent vos classes sont liées aux "concepts" qui ont le même nom que la classe.
    Un objet Episode permet de modéliser un épisode, avec, son numéro d'épisode, un lien vers la saison dont il fait partie, les séquences de visualisation de cet épisode, etc...
    Un objet Serie permet aussi de modéliser mais ici une Série, avec son nom, son diffuseur, ces saisons, etc...

    De manière interne à une Série, vous devez distinguer les saisons et les hors-saisons.
    Mais votre architecture de fichier est si mal fichue que vous ne pouvez pas construire ces 2 listes avant d'avoir lu pas mal de fichiers.
    (Mantra : Nous, on ne comprend pas pourquoi vous ne vous simplifiez pas la vie avec une arborescence des fichiers plus simple. (des formats de fichiers plus simples AUSSI) )
    Il serait possible de retarder la création d'un objet Serie après avoir lu l'ensemble des informations nécessaires à l'initialisation de ses champs, mais cela serait assez complexe.
    Donc, pour avoir un truc simple, qui, une fois l'initialisation faite, calcule les champs "m_hors_saisons" et "m_non_hors_saisons" (et potentiellement plein d'autres choses) pour que ces informations sur la série soient facilement accessibles.
    C'est pour cela que j'avais proposé de renommer "PostTraitement" et "PostInitialisation" car plus précis.
    Quand vous aurez compris l'utilité d'une classe, les séries, les épisodes seront entièrement initialisés juste après la fin de leur constructeur car ils auront aspiré l'ensemble des informations contenues dans le répertoire passé en paramètre.
    C'est déjà le cas de la classe "InfosVisionnage", et indirectement des classes Episode et SequenceVisionnage, mais cela peut être généralisé à toutes les classes, quand on se sera débarrassé de toutes ces fonctions "initialiser_xxx" (ou rendu à usage uniquement interne et privé).t
    Dans ce cas, les constructeurs des classes seront majoritairement de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    classe MaClasse
    {
    ...
        void PostInitialisation();
    ...
    public :
        MaClasse(std::filesystem::path const& reprtoire_racine)
        {
            ...
            PostInitialisation();
        }
    ...
    }
    En gros "PostInitialisation" sera la dernière étape du constructeur et cette fonction pourra utiliser toutes les informations récoltées.

    Mais actuellement, ce n'est pas le cas.
    Normalement, un objet "métier" à un cycle de vie de la forme (très approximative) :
    -Initialisation
    -Calcul de règles métiers
    -Sauvegarde des informations calculées

    Vous, vous avez la fixette d'afficher ces objets, OK.
    Mais vous devez attendre la fin de l'initialisation pour pouvoir afficher des informations cohérentes.
    En l'absence de cette Initialisation via un constructeur "atomique", vous devez appeler "PostInitialisation" (ou équivanent) avant l'affichage.
    Une solution, c'est de le faire AU DEBUT de la fonction "Print", pour que toutes les fonctions d'affichage disposent d'informations cohérentes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void Serie::Print()
    {
        // Header
        Print_Header();
        ...
        // Saison(s)
        PostTraitement();
        Print_Saisons();
    }
    C'est tout l'inverse qu'il faut faire (temporairement)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void Serie::Print()
    {
        PostTraitement();
     
        // Header
        Print_Header();
        // Titre Original
        ....
        Print_Saisons();
    }
    Simplifiez-vous le code, SVP !!!
    Le fait d'avoir un objet fonctionnel et cohérent dès la fin de l'initialisation/constructeur simplifie grandement tout le reste des fonctions de cette classe.
    Donc, pensez à rapidement changer vos mécanismes de créations des objets. (plus d'appel 'externes à la classe" des fonctions "initialiser_xxx")

    Pour que std::vector puisse correctement travailler, il fait qu'il puisse "déplacer" et/ou cloner facilement les objets qu'il contient.
    Avec des classes simples qui n'ont que des champs "simples", le compilateur génère facilement les constructeurs et autres opérateurs d'affectation pour que cela fonctionne "automatiquement'.
    Mais nos classes sont actuellement trop complexes pour que le compilateur puisse générer de "bons" constructeurs et opérateurs d'affectation.
    C'est à nous de les fournir.

    Donc regardez bien les constructeurs et opérateurs d'affectation que je vous demande d'ajouter ou de modifier.
    C'est ce que va utiliser std::vector pour faire son boulot.

    Il est donc primordial que vous fassiez RAPIDEMENT ces ajouts et modifications, sans attendre.

    On vous expliquera ça plus tard, si nécessaire.

    Donc ???
    (BIS°
    Appliquez TOUT ce qui est indiqué (avec les explications ci-avant pour les précisions)

    Ben oui !!! Compliqué et pas compris !
    Appliquez TOUT ce qui est indiqué. Qu'est qui est compliqué dans le fait de voir que 2 bouts de code font la même chose ???

    Ben oui !!! Comment faire ?
    Idem, appliquez ce qui est indiqué au niveau des constructeurs et opérateurs d'affectation, pour que std::vector fonctionne correctement.

    C oui, un peu !
    C++ :
    Prenez la peine de lire un livre/un cours de C++. Ca sera plus efficace.

    Je suis crevé !!!
    ...
    Plus tard !!!
    ...
    Comment faire ???
    Pas de plus tard, si vous n'appliquez pas les indications au niveau des constructeurs et opérateurs d'affectation RAPIDEMENT, on s'en sortira pas.

  7. #1107
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 782
    Par défaut
    Vous ne l'avez fait que dans les fichiers serie.cpp/.h, vous pouvez le faire dans tous les fichiers sources.
    "const void" n'est JAMAIS valide. Le compilateur est vraiment "trop gentil" avec vous.

    Mais : const void AffichagePersonnaliser(AffichagePersonnalisation perso); ou pas ???
    C'est encore plus vrai sur cette fonction, car, en plus, elle modifie les champs de l'instance de la classe, donc rien de "const"ant.
    On ne peut même pas "justifier cette erreur" en ayant inversé malencontreusement "const TypeDeRetout MaFonctionQuiNeModifiePasLInstance()" et "TypeDeRetout MaFonctionQuiNeModifiePasLInstance() const".
    Car "AffichagePersonnaliser" modifie l'objet associé, donc l'objet ne peut être constant si l'on appelle cette fonction. On ne peut pas appeler cette fonction si l'objet a été indiqué comme constant.

    Vous devez comprendre à quoi sert le mot-clé "const", RAPIDEMENT.
    https://github.com/laurentbouleau/Exemple : Février 03 (08/02/2025)

  8. #1108
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 782
    Par défaut
    Vous ressuscitez le champ "m_numero" de la classe SequenceVisionnage au lieu de ressusciter le champ "m_NumeroEpisode".
    https://github.com/laurentbouleau/Exemple : Février 04 (08/02/2025)

  9. #1109
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 782
    Par défaut
    https://github.com/laurentbouleau/Exemple : Février 05 (08/02/2025)
    Ok !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    void Serie::PostTraitement()
    {
        //    std::list<Saison> m_hors_saisons;
        //    std::list<Saison> m_non_hors_saisons;
     
        for (auto& saison : saisons)
        {
            if (saison.m_hors_saison)
            {
     
                m_hors_saisons.emplace_back(move(saison));
            }
            else
            {
                m_non_hors_saisons.emplace_back(move(saison));
            }
        }
    }
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void Serie::Print_Saisons()
    {
        for (auto& saison : saisons)
        {
            saison.Print();
            std::wcout << L"\r\n\r\n";
        }
    }
    Ok !

    Nom : Capture d’écran 2025-02-08 185504.png
Affichages : 132
Taille : 91,2 Ko

    Mais :
    Donc, pour avoir un truc simple, qui, une fois l'initialisation faite, calcule les champs "m_hors_saisons" et "m_non_hors_saisons" (et potentiellement plein d'autres choses) pour que ces informations sur la série soient facilement accessibles.
    ???

    Et pas fait = operator= !!!

    -----------
    Ok ou pas ! Comment faire ?

  10. #1110
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 428
    Par défaut
    https://github.com/laurentbouleau/Exemple : Février 03 (08/02/2025)
    OK

    https://github.com/laurentbouleau/Exemple : Février 04 (08/02/2025)
    Vous avez supprimé "m_numero" mais il faudrait maintenant initialiser et utiliser "m_NumeroEpisode".

    https://github.com/laurentbouleau/Exemple : Février 05 (08/02/2025)
    Ok, sauf pour "void Serie:: Print_Saisons()".
    Le résultat est "correct" par "chance" de l'ordre de lecture des fichiers (que vous ne maitrisez pas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void Serie::Print_Saisons()
    {
        for (auto& saison : m_hors_saisons)
        {
            saison.Print();
        }
    
        for (auto& saison : m_non_hors_saisons)
        {
            saison.Print();
        }
    }
    .

    MAIS CELA FONCTIONNERA UNIQUEMENT SI :
    Pas de plus tard, si vous n'appliquez pas les indications au niveau des constructeurs et opérateurs d'affectation RAPIDEMENT, on s'en sortira pas.(BIS)

    EDIT : Oups, les références oubliées, car copier-coller de mauvais code.

  11. #1111
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 782
    Par défaut
    MAIS CELA FONCTIONNERA UNIQUEMENT SI :
    Pas de plus tard, si vous n'appliquez pas les indications au niveau des constructeurs et opérateurs d'affectation RAPIDEMENT, on s'en sortira pas.(BIS)
    Vous ou moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Serie
    {
    public:
     ...
        std::vector<Saison>saisons{};
    ...
    private:
    ...
        void PostTraitement();
        //void Print_Saison(Saison saison);
        void Print_Saisons();
    ...
        void Print_Header() const;
    ...
        std::list<Saison> m_hors_saisons{};
        std::list<Saison> m_non_hors_saisons;
    ...
    };
    Nom : Capture d’écran 2025-02-10 223545.png
Affichages : 117
Taille : 22,3 Ko
    Le problème ???

    Merci beaucoup

  12. #1112
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 428
    Par défaut
    Vous ne nous donnez pas le code que vous avez modifié.

    La version dans Git de serie.cpp n'a pas 1838 lignes et encore moins 1843.

    Mais je suppose que vous n'avez pas correctement géré l'utilisation d'une variable de boucle.

    Le compilateur vous engueule parce que vous lui demandez de cloner (via le constructeur par copie) un objet Saison et que vous ne lui avez pas donné l'implémentation de ce constructeur.

    Je pense donc que vous devez avoir du code qui ressemble à celui ci-après mais où vous avez oublié d'utiliser des références.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void Serie::Print_Saisons()
    {
        for (auto& saison : m_hors_saisons)
        {
            saison.Print();
        }
    
        for (auto& saison : m_non_hors_saisons)
        {
            saison.Print();
        }
    }

  13. #1113
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 782
    Par défaut
    https://www.ionos.fr/ ===>
    Connexion à [2001:8d8::1]:21...Échec de la tentative de connexion avec "ECONNREFUSED - Connexion refusée par le serveur". ou Connecting to [2001:8d8::1]:21... Connection attempt failed with "ECONNREFUSED - Connection refused by server".
    ===>
    Vous tentez d'accéder à l'espace Web via logiciel FTP qui se connecte en IPv6 et le serveur de l'espace Web IONOS refuse la connection. L'accès FTP n'est possible qu'en IPv4. Pour accéder à l'espace Web en IPv6, il est nécessaire de configurer le logiciel en SFTP/FTPS.
    ===> https://www.ionos.fr/assistance/hebe...s-derreur-ftp/ ???

    Auxiliaire de vie et moi ! Téléphones et : IONOS et Free : pas compris !!!

    2 semaines : rien !!!

    FTP ===> FTPS
    https://filezilla-project.org/ et windows !!!
    et/ou :
    https://winscp.net/eng/docs/message_...campaign=6.3.6

    Serveur / Host : home458328339.1and1-data.host
    Port : 22
    Protocole : SFTP + SSH
    Nom d’utilisateur : u72434880
    Mot de passe : (...)
    ===> https://www.b-lolo.fr : Extensions : 4 nouvelles versions !!!


    ===> https://www.ionos.fr/assistance/index.php?id=2979 ???
    et : https://www.ionos.fr/assistance/hebe...s-derreur-ftp/ ???

    Mais, DNS IPv6 !!! Ah non !
    Plutôt : DNS IPv4 !!! (212.27.40.240 et 212.27.40.241 (Free))
    ===> https://assistance.free.fr/articles/363
    Help me !!!

  14. #1114
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 428
    Par défaut
    Vous devriez poser ces questions dans les forums dédiés à ce type de problème.
    Des administrateurs système vous y répondraient de manière bien plus efficace.

    FTPS est un successeur à FTP, bien plus sécurisé que le précédent.
    SFTP est une alternative à FTP/FTPS qui est plus simple à mettre en œuvre.

    Aux vues des messages d'erreurs, il y a 2 approches.

    - Soit faire en sorte que vous utilisiez encore IPv4 à la place d'IPv6. (C'est un peu "reculer pour mieux sauter")
    - Soit utiliser un client FTPS ou SFTP en renseignant correctement votre "identifiant/mot de passe".

    Pour la première approche, je vous laisse regarder comment activer ou réactiver le protocole IPv4 sur votre système d'exploitation.
    Si vous avez du mal à voir si vos actions ont porté leur fruit, postez ici le résultat de la commande "IPCONFIG" lancée depuis une console. (en cachant les adresses IP, on n'est jamais trop prudent.)

    Pour la seconde approche, Filezila et WinSCP sont des outils qui "comprennent" les protocoles SFTP et FTPS. (A moins que les versions utilisées soient vieilles de plusieurs dizaines d'années)
    Les traces que vous avez postées me semble "correctes" : bon numéro de port, de protocoles, etc...
    Vous n'avez pas la suite des traces, avec le message d'erreur ?

    P.S.: Mais pensez à poser les questions sur ce type de problème dans des forums dédiés à ce type d'ennui.

  15. #1115
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 782
    Par défaut
    Bonjour,

    Pas de réponse ! https://www.developpez.net/forums/d2...va/ionos-free/ !!!
    Tant-pis !!!

    --------------------------

    https://github.com/laurentbouleau/Exemple : Février 06 (20/02/2025)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void Saison::Print_Header()
    {
        std::wstring saison_str = m_keyColor[0];
    ...
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        std::vector<Saison> m_hors_saisons{};
        std::vector<Saison> m_non_hors_saisons{};
    MAIS CELA FONCTIONNERA UNIQUEMENT SI :
    Pas de plus tard, si vous n'appliquez pas les indications au niveau des constructeurs et opérateurs d'affectation RAPIDEMENT, on s'en sortira pas.(BIS)
    pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Serie
    {
    public:
    ...
    private:
    ...
        std::vector<Saison> m_hors_saisons{};
        std::vector<Saison> m_non_hors_saisons{};
    ...
    };
    avec : emplace_back et std::move(src....) ???

    Merci beaucoup

  16. #1116
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 428
    Par défaut
    "java/developpement-web-java", votre problème n'est pas vraiment lié à JAVA ni au développement Web en JAVA.

    Je pense que pour les forum sur Developpez.ne, c'est plus :
    https://www.developpez.net/forums/f1...b/hebergement/
    ou
    https://www.developpez.net/forums/f5...es-hebergeurs/
    ou (car je crois me souvenir que 1&1 est l'ancien nom de IONOS :
    https://www.developpez.net/forums/f5...ebergement/11/

    https://www.purebasic.fr/english/viewtopic.php?t=85658
    Votre serveur est sous Linux ou sous Windows ?
    Le port et le protocole semblent différents en fonction de l'OS du serveur.

    Pour les modifications dans la version Github "Février 06 (20/02/2025)" :
    Plutôt OK avec les modifications, MAIS :
    Pourquoi ajouter un membre "bool m_non_hors_saison" à la classe "Saison" ???
    C'est l'exacte opposé au membre déjà existant "bool m_hors_saison", ou cela devrait l'être.
    Ne complexifiez pas inutilement votre code, supprimez ce champ superfétatoire et remplacez le code qui l'utilise avec un code qui utilise le champ "m_hors_saison" à la place.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //std::list<Saison> m_hors_saisons{};
        //std::list<Saison> m_non_hors_saisons{};
        std::vector<Saison> m_hors_saisons{};
        std::vector<Saison> m_non_hors_saisons{};
    Pourquoi passer le type de ces champ de std::list à des std::vector ???

    std::wstring saison_str = m_keyColor[0];
    Après, votre code plante parce que vous n'avez pas correctement géré la copie des champs "m_keyColor" (entre autres) des classes qui s'en servent.
    Dans le code que je vous ai fourni, j'ai délibérément omis ces champs, car depuis le début je vous indique que l'affichage n'a rien à faire dans ce type de classe "métier".

    Si vous voulez toujours vous prendre les pieds dans le tapis, faut juste correctement propager ces valeurs entre l'objet original et son clone :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    SequenceVisionnage(const Episode& episode, const SequenceVisionnage& src) :
            m_episode{ episode }, m_titres{ src.m_titres }, m_streaming{ src.m_streaming },
            m_duree_en_seconde{ src.m_duree_en_seconde }, m_resume{ src.m_resume },
            m_DatesVisionnage{ src.m_DatesVisionnage }/*, m_numero{src.m_numero}*/, m_NumeroEpisode{ src.m_NumeroEpisode },m_keyColor{ src.m_keyColor }
        {
        };
    
    SequenceVisionnage(const Episode& episode, const InfosVisionnage& info_vis) :
            m_episode{ episode }, m_titres{ info_vis.m_titres }, m_streaming{ info_vis.m_streaming },
            m_duree_en_seconde{ info_vis.m_duree_en_seconde }, m_resume{ info_vis.m_resume },
            m_DatesVisionnage{ info_vis.m_DatesVisionnage }/*, m_numero{info_vis.m_numero}*/, m_NumeroEpisode{ info_vis.m_NumeroEpisode }, m_keyColor{ info_vis.m_keyColor }
    
    ...
    
    Episode& operator=(const Episode& src)
    {
       if (&src != this)
       {
           for (auto const& lsvoc : src.m_liste_sequence_visionnages_ordonnee_chronologiquement)
           {
               m_liste_sequence_visionnages_ordonnee_chronologiquement.emplace_back(SequenceVisionnage{ *this, lsvoc });
           }
           m_resume = src.m_resume;
           m_duree = src.m_duree;
           m_numero = src.m_numero;
    
           m_keyColor = src.m_keyColor;
       }
       return *this;
    }
    
    ...
    
        Saison& operator=(Saison&& src) noexcept
        {
            if (&src != this)
            {
                for (auto& ep : src.m_liste_episodes)
                {
                    m_liste_episodes.emplace_back(Episode{ *this, std::move(ep) });
                }
                m_audiodescription = std::move(src.m_audiodescription);
                m_avec = std::move(src.m_avec);
                m_date_diffusee_a_partir_de = std::move(src.m_date_diffusee_a_partir_de);
                m_disney = std::move(src.m_disney);
                m_f_anneesDiffusion = std::move(src.m_f_anneesDiffusion);
                m_chaine = std::move(src.m_chaine);
                m_hors_saison = std::move(src.m_hors_saison);
                m_non_hors_saison = std::move(src.m_non_hors_saison);
    
                m_image = std::move(src.m_image);
                m_netflix = std::move(src.m_netflix);
                m_note = std::move(src.m_note);
    
                m_titres = std::move(src.m_titres);
                m_resume = std::move(src.m_resume);
    
                m_nombre_episodes = std::move(src.m_nombre_episodes);
                m_numero = std::move(src.m_numero);
    
                m_keyColor = std::move(src.m_keyColor);
            }
            return *this;
        }
    Mais, bon, voulez-vous vraiment faire ces conneries pour tous ces champs liés à l'affichage.

  17. #1117
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 782
    Par défaut
    Je pense que pour les forum sur Developpez.ne, c'est plus :
    https://www.developpez.net/forums/f1...b/hebergement/
    ou
    https://www.developpez.net/forums/f5...es-hebergeurs/
    ou (car je crois me souvenir que 1&1 est l'ancien nom de IONOS :
    https://www.developpez.net/forums/f5...ebergement/11/

    https://www.purebasic.fr/english/viewtopic.php?t=85658
    Votre serveur est sous Linux ou sous Windows ?
    Le port et le protocole semblent différents en fonction de l'OS du serveur.
    Linux !!! J'ai oublié !

    https://github.com/laurentbouleau/Exemple : Février 07 (20/02/2025)
    Demain !!!

  18. #1118
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 428
    Par défaut
    Donc, posez vos question dans le "bon" forum, en y mettant assez de contexte pour que les intervenants puissent comprendre le problème "à régler".

    Pour le code sur GitHub, ok avec les changement.

    L'affichage est un peu trop vert à mon goût.

    Mais comme j'insiste depuis le début pour ne pas avoir le code d'affichage dans ces classes, je ne suis pas étonné par ces "difficultés".

    Vous voulez faire quoi "maintenant" ? (Mais essayez de comprendre tout le code actuel avant ).

  19. #1119
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 782
    Par défaut
    https://github.com/laurentbouleau/Exemple : Février 08 (21/02/2025)
    ---> m_valuesColor !!!

    Donc, posez vos question dans le "bon" forum, en y mettant assez de contexte pour que les intervenants puissent comprendre le problème "à régler".
    Valeriu Vrabie (le voisin ancien) est venu à 19/02/2025 à 18h : https://www.ionos.fr/assistance/index.php?id=2979 : copier/coller ! Et voilà ! Mais, moi, rien compris !!!
    Après e-mail : Répons pas !!!

    L'affichage est un peu trop vert à mon goût.
    ---> m_valuesColor !!!

    Mais comme j'insiste depuis le début pour ne pas avoir le code d'affichage dans ces classes, je ne suis pas étonné par ces "difficultés".
    Pardon ???

    Vous voulez faire quoi "maintenant" ? (Mais essayez de comprendre tout le code actuel avant ).
    ---> m_valuesColor !!!

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void SequenceVisionnage::Print(int numero_sequence) const
    Maintenant !!!

  20. #1120
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 782
    Par défaut
    https://github.com/laurentbouleau/Exemple : Février 09 (21/02/2025)

    Marches pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    void SequenceVisionnage::Print(int numero_sequence) const
    {
        std::wstring chiffre_str{};
        std::wstring wstr;
        std::wstring duree_str;
        static std::wstring ch;
        static std::wstring tr;
    
        long chiffre = Print_Titre_chiffre(numero_sequence);
    
        if (numero_sequence == 1)
        {
            chiffre_str = std::to_wstring(m_episode.m_saison.m_numero) + m_keyColor[1] + L'x' + m_valuesColor + std::to_wstring(m_episode.m_numero) + m_keyColor[1] + L" : " + m_valuesColor;
            ch = chiffre_str;
        }
        else
        {
            chiffre_str = ch;
            ///...
        }
    
        if (numero_sequence > 1)
        {
            //wstr = tr;
            wstr = L"aaa";
        }
        else if (m_titres.size() == 1)
        {
            wstr = m_keyColor[1] + m_titres[0] + m_valuesColor;
            tr = wstr;
        }
        else if (m_titres.size() > 2)
        {
            wstr = m_keyColor[1] + m_titres[0] + m_valuesColor + m_titres[1] + m_keyColor[1] + m_titres[2] + m_valuesColor;
            tr = wstr;
        }
    
        if (numero_sequence == 1)
            duree_str = calcul_Duree_affichage(numero_sequence);
        else
            duree_str += L' ' + m_keyColor[1] + L'[' + m_valuesColor + L"bis" + m_keyColor[1] + L']' + m_valuesColor;
    
        std::wstring dates_str = m_keyColor[1] + L" : " + m_valuesColor + Print_Dates_de_visionnage();
    
        std::wstring resume_str;
    
        if (numero_sequence == 1)
        {
            resume_str += L"\r\n";
            for (auto r : m_resume)
                resume_str += r;
        }
    
        std::wcout << chiffre_str << wstr << duree_str << dates_str << resume_str << L"\r\n";
    }
    Ni ch, ni tr !!!

    Alors...

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probléme avc la formclosing
    Par dv-2008 dans le forum VB.NET
    Réponses: 2
    Dernier message: 23/03/2008, 16h33
  2. probléme avc console.readline()
    Par dv-2008 dans le forum VB.NET
    Réponses: 7
    Dernier message: 10/03/2008, 00h33
  3. j'ai un probléme avc un code vb.net aider moi svp
    Par dv-2008 dans le forum VB.NET
    Réponses: 12
    Dernier message: 29/01/2008, 09h20
  4. Problème avc une requête
    Par Raiga dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 30/06/2007, 18h36
  5. Toujours problème de lien avce la lib Cblas
    Par Kirou dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 19/06/2007, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo