Fonction avec arguments par défaut

Résolu/Fermé
firstdied Messages postés 18 Date d'inscription mardi 28 février 2012 Statut Membre Dernière intervention 16 janvier 2013 - 15 janv. 2013 à 17:20
mamiemando Messages postés 33387 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 novembre 2024 - 16 janv. 2013 à 20:42
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
A voir également:

1 réponse

mamiemando Messages postés 33387 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 novembre 2024 7 803
Modifié par mamiemando le 16/01/2013 à 20:20
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
firstdied Messages postés 18 Date d'inscription mardi 28 février 2012 Statut Membre Dernière intervention 16 janvier 2013
16 janv. 2013 à 20:41
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
mamiemando Messages postés 33387 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 novembre 2024 7 803
16 janv. 2013 à 20:42
De rien bonne continuation !
0