Partage
  • Partager sur Facebook
  • Partager sur Twitter

2 questions:

Problème de cast + configurer c::b

Anonyme
    14 août 2008 à 10:52:09

    Bonjour à tous,

    J'ai voulu mettre mes connaissance en pratique en convertissant du int en double. Puis en afficher le résultat.

    Cependant erreur lors de la compilation:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    
        int n = 10, p = 3, resultat = 0;
    
        (double) resultat = n/p; //conversion des variable int en double
    
        cout << resultat ;
    
    
        return 0;
    }
    

    Les erreurs:
    In function int main
    ligne 10 : error: ISO C++ forbids cast to non-reference type used as lvalue


    Ensuite, j'aurais bien voulu savoir comment configurer code::blocks. Merci
    • Partager sur Facebook
    • Partager sur Twitter
      14 août 2008 à 10:56:13

      En c++ on ne cast pas comme cela il faut que tu regarde tu coté de static_cast.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        14 août 2008 à 11:01:57

        ça compile, mais affiche un entier :

        #include <iostream>
        
        using namespace std;
        
        int main()
        {
        
            int n = 10, p = 3;
        
            static_cast<double> (n/p);
        
            cout << n/p ;
        
        
            return 0;
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          14 août 2008 à 11:08:15

          c'est un peu normal
          dans quoi stock tu ceci :
          static_cast<double>(n/p);
          

          essaie plutôt ceci :

          cout << static_cast<double>(n/p) << endl;
          
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            14 août 2008 à 11:10:37

            toujours un entier, c'est bizarre, sinon ne saurait tu pas comment configurer code blocks ?
            • Partager sur Facebook
            • Partager sur Twitter
              14 août 2008 à 11:12:26

              non je ne me sers pas de cette IDE je code essentiellement sous mac os et sous linux j'utilise emacs et le terminal
              • Partager sur Facebook
              • Partager sur Twitter
                14 août 2008 à 11:15:36

                n et p sont entiers, donc n/p aussi. tu ne dois pas caster le résultat de n/p, mais n et/ou p, au choix.

                cout << static_cast<double>(n)/p << endl;
                
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  14 août 2008 à 11:25:55

                  Merci spaz.

                  (double) n/p; // exemple

                  il est utilisé en C ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    14 août 2008 à 11:59:59

                    Citation : darkpoujol

                    En c++ on ne cast pas comme cela il faut que tu regarde tu coté de static_cast.


                    Si, ça peut se faire, et d'ailleurs, tu as trois manières de le faire en C++ : ( je ne suis pas sur )
                    (double)x
                    double(x)
                    (double)(x)
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      14 août 2008 à 12:14:27

                      Merci devilgeo.

                      Maintenant j'aimerais configurer code:blocks, quelqu'un peut il m'aider ? les recherches sur le forums ne donnent rien.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        14 août 2008 à 12:44:13

                        Citation : Devilgeo

                        Citation : darkpoujol

                        En c++ on ne cast pas comme cela il faut que tu regarde tu coté de static_cast.


                        Si, ça peut se faire, et d'ailleurs, tu as trois manières de le faire en C++ : ( je ne suis pas sur )

                        (double)x
                        double(x)
                        (double)(x)
                        
                        Hum, c'est vrai, tu _peux_ (note, je suis pas sûr des trois syntaxe). Mais je te le déconseille très fortement. Avec static_cast tu peux avoir une erreur de compilation, ce qui est excellent pour simplifier le débugage.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          14 août 2008 à 12:50:09

                          Ok Hiura, tu ne saurais pas comment régler code::blocks ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            14 août 2008 à 12:57:50

                            "régler" est vaste. Que veux-tu régler?
                            settings> et tout y est.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              14 août 2008 à 13:03:20

                              Pourquoi vous déconseillez fortement le cast (type) var, ca dépend juste des situations, si un opérateur de cast (operator type) est défini alors mieux vaut utilisé (type) var que un static ou dynamic cast. Et le static_cast ne fait aucune vérification dynamique des type, la seul différence avec un cast a la C c'est qu'il ne permet pas d'oter les cv, mais il est tout aussi dangereux.
                              • Partager sur Facebook
                              • Partager sur Twitter
                              FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
                                14 août 2008 à 13:21:50

                                'lut

                                je ne vais pas rentrer dans le débat de cast, static_cast, etc. je ne maitrise pas.
                                Par contre, j'ai quelques interrogations sur le code initialement proposé.
                                int n = 10, p = 3, resultat = 0;
                                
                                    (double) resultat = n/p; //conversion des variable int en double
                                

                                resultat est un entier. il me semble donc que si tu fais (double) resultat = 10,5;
                                il va coller la partie entière de 10,5 dans resultat (donc 10) et renvoyer un double (donc 10,0).

                                Perso, j'aurais écrit :
                                int n = 10, p = 3;
                                double resultat;
                                
                                resultat = (double) n / (double) p;
                                // ou
                                resultat = (double) n / p;
                                

                                resultat étant bien un double, il peut recevoir un double.


                                double resultat = 10,5;
                                cout << (int) resultat; // devrait bien renvoyer 10.
                                
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  14 août 2008 à 13:25:54

                                  Citation

                                  Pourquoi vous déconseillez fortement le cast (type) var, ca dépend juste des situations, si un opérateur de cast (operator type) est défini alors mieux vaut utilisé (type) var que un static ou dynamic cast. Et le static_cast ne fait aucune vérification dynamique des type, la seul différence avec un cast a la C c'est qu'il ne permet pas d'oter les cv, mais il est tout aussi dangereux.



                                  Le cast hérité du C va faire un transtypage qui peut ne pas être en accord avec les intentions du programmeur, qui peut être une combinaison de static_cast, reinterpret_cast et const_cast. Ces derniers sont donc moins ambigus, et le résultat est plus certain d'être le même d'une plateforme à une autre.
                                  Les casts C++ peuvent ne pas compiler là où un cast C le ferait à tord, ou renvoyer une erreur.
                                  De plus ils sont plus pénibles à écrire, ça fait réfléchir au moment de les utiliser et c'est pas plus mal :) , et ils ont une meilleure visibilité due à leur syntaxe.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    14 août 2008 à 13:49:27

                                    Le cast hérité du C va faire un transtypage qui peut ne pas être en accord avec les intentions du programmeur, qui peut être une combinaison de static_cast, reinterpret_cast et const_cast. Ces derniers sont donc moins ambigus, et le résultat est plus certain d'être le même d'une plateforme à une autre.
                                    Les casts C++ peuvent ne pas compiler là où un cast C le ferait à tord, ou renvoyer une erreur.
                                    De plus ils sont plus pénibles à écrire, ça fait réfléchir au moment de les utiliser et c'est pas plus mal :) , et ils ont une meilleure visibilité due à leur syntaxe.</citation>

                                    Oui, enfin la seul exeption qui peut etre lancée est bad_cast et uniquement pour le dynamic_cast dont le type cible n'est pas un pointeur, sinon en cas d'erreur il retourne le pointeur NULL. Dans les autre cas le code ne compilera pas. Mais bon les opérateur de transtypage du C++ servent principalement la ou il peut y avoir ambiguité sur la validité du transtypage, pour une simple conversion int -> double, l'utilisation d'un cast a la C ne gene pas, il n'y a aucune ambiguité sur la validité de transformer un int en double.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost

                                    2 questions:

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown