Fonction avec arguments par défaut

Résolu
firstdied Messages postés 20 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
J'ai un simple problème avec mon constructeur

complex::complex(double c1=0.0,double c2=0.0):real(c1),imaginary(c2)
{}

apparemment celui-ci n'accepte pas es valeurs par défaut
message d'erreur:
default argument given for parameter 1 of 'complex::complex(double, double)' [-fpermissive]|

J'utilise la dernière version de code::blocks.

Merci pour votre aide

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    Chez moi ceci compile sans problème :

    class complex_t { 
        private: 
            double real; 
            double imag; 
        public: 
            complex_t(double real0 = 0, double imag0 = 0): 
                real(real0), 
                imag(imag0) 
            {} 
    };   
    
    int main() { 
        return 0; 
    }


    ... avec :

    (mando@silk) (~) $ g++ --version 
    g++ (Debian 4.7.2-4) 4.7.2 
    Copyright (C) 2012 Free Software Foundation, Inc. 
    This is free software; see the source for copying conditions.  There is NO 
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


    Autre syntaxe (.hpp + .cpp) :

    // complex.hpp 
    
    #ifndef COMPLEX_HPP 
    #define COMPLEX_HPP 
    
    #include <ostream> 
    
    class complex_t { 
            private: 
                    double real; 
                    double imag; 
            public: 
                    complex_t(double real0 = 0, double imag0 = 0); 
                    double get_real() const; 
                    double get_imag() const; 
    }; 
    
    inline std::ostream & operator << (
        std::ostream & out,
        const complex_t & c
    ) { 
            out << c.get_real() << " + " << c.get_imag() << ".i"; 
    } 
    
    #endif 
    
    // complex.cpp 
    
    #include "complex.hpp" 
    
    complex_t::complex_t(double real0, double imag0): 
            real(real0), 
            imag(imag0) 
    {} 
    
    double complex_t::get_real() const { 
            return real; 
    } 
    
    double complex_t::get_imag() const { 
            return imag; 
    } 
    
    // main.cpp 
    
    #include <iostream> 
    #include "complex.hpp" 
    
    int main() { 
            complex_t c1; 
            complex_t c2(4, 5); 
            std::cout << "c1 = " << c1 << std::endl 
                          << "c2 = " << c2 << std::endl; 
            return 0; 
    }


    Résultat :

    (mando@silk) (~) $ g++ -c complex.cpp  
    (mando@silk) (~) $ g++ toto.cpp complex.o  
    (mando@silk) (~) $ ./a.out  
    c1 = 0 + 0.i 
    c2 = 4 + 5.i


    Peut-être que ton erreur c'est de redonner l'initialisation dans le ".cpp" ? Normalement les valeurs par défaut ne sont données que dans le ".hpp" (plus exactement dans la déclaration) et ne sont pas rappeler dans le ".cpp" (dans l'implémentation).

    Bonne chance
    1
    1. firstdied Messages postés 20 Statut Membre
       
      Exactement mon erreur!
      Avant ça compilait car j'avais désactivé ~fpermissive, ce qui avait pour conséquence de tolérer cet erreur.
      Merci
      0
    2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
       
      De rien bonne continuation !
      0