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 :

Compilation de classe : erreur constructeur : "expected `)' before '=' token"


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut Compilation de classe : erreur constructeur : "expected `)' before '=' token"
    Bonjour,

    Je tente de compiler une classe d'envoi d'emails via utilisation d'un socket.

    J'ai cependant ce message d'erreur lors de la compilation :
    expected `)' before '=' token
    , à la ligne où je déclare le constructeur de ma classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mail(ipSMTP="serveurmail.com", port=25)
    Je suspecte que le problème vienne des deux attributs de type string déclarés avant la méthode init de la classe :

    Voici le contenu de mail.h contenant la classe Mail :

    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
    66
    67
    68
    69
    70
    71
    72
     
    #if defined (WIN32)
        #include <winsock2.h>
        typedef int socklen_t;
    #elif defined (linux)
        #include <sys/types.h>
        #include <sys/socket.h>
        #include <netinet/in.h>
        #include <arpa/inet.h>
        #include <unistd.h>
        #define INVALID_SOCKET -1
        #define SOCKET_ERROR -1
        #define closesocket(s) close(s)
        typedef int SOCKET;
        typedef struct sockaddr_in SOCKADDR_IN;
        typedef struct sockaddr SOCKADDR;
    #endif
     
    #include <string>
    #include <iostream>
     
     
    using namespace std;
     
    class Mail
    {
          private :
     
          public :
                 SOCKET sock;
                 SOCKADDR_IN sin;
                 char buffer[255];
                 int erreur;
                 int port;
                 string message;
                 string ipSMTP;
     
                  Mail(ipSMTP="serveurmail.com", port=25)
                  {
                       #if defined (WIN32)
                        WSADATA WSAData;
                        erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
                         #else
                            erreur = 0;
                         #endif
     
                       message = "";
     
                       /* Création de la socket */
                        sock = socket(AF_INET, SOCK_STREAM, 0);
     
                        /* Configuration de la connexion */
                        sin.sin_addr.s_addr = inet_addr(ipSMTP.c_str());
                        sin.sin_family = AF_INET;
                        sin.sin_port = htons(port);
                  }
     
                  ~Mail()
                  {
                       /* On ferme la socket précédemment ouverte */
                            closesocket(sock);
     
                            #if defined (WIN32)
                                WSACleanup();
                            #endif
                  }
     
                  void envoi()
                  {
                       //Instructions d'envoi d'email par la socket via le SMTP
                  } 
    };
    Merci d'avance de votre aide !

    Niusha

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Tu te trompes en fait sur la manière d'utiliser un constructeur.
    Effectivement ça sert à initialiser les valeurs des membres de la classe, mais tu t'y prends très mal.
    Tu peux te faire un constructeur par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Mail()
    	:	ipSMTP( "serveurmail.com" )	// Initialisation des membres
    	,	port( 25 )
    {
    }
    Tu peux aussi faire un constructeur spécifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Mail( string const & p_ipSmtp, int p_port)
    	:	opSMTP( p_ipSmtp )
    	,	port( p_port )
    {
    }
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut
    Euh si c'est possible ?
    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
    #include <string>
     
    class Mail
    {
    private :
    	int _port;
    	std::string _ipSMTP;
    public :
    	Mail(const std::string& ipSMTP="serveurmail.com", int port=25)
    	: _ipSMTP(ipSMTP), _port(port)
    	{
    	} 
    };
     
    int main() 
    {
    	Mail m ;
    	Mail m2("server", 123 );
    }

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut
    Citation Envoyé par themadmax Voir le message
    Euh si c'est possible ?
    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
    #include <string>
     
    class Mail
    {
    private :
    	int _port;
    	std::string _ipSMTP;
    public :
    	Mail(const std::string& ipSMTP="serveurmail.com", int port=25)
    	: _ipSMTP(ipSMTP), _port(port)
    	{
    	} 
    };
     
    int main() 
    {
    	Mail m ;
    	Mail m2("server", 123 );
    }
    Oui merci ta solution fonctionne ! Voici mon code après modification :

    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
    class Mail
    {
          private :
     
          public :
                 SOCKET sock;
                 SOCKADDR_IN sin;
                 char buffer[255];
                 int erreur;
     
                 string message;
     
                 string _ipSMTP;
                 int _port;
     
                 Mail(const string& ipSMTP="localhost", int port = 25)
                            : _ipSMTP(ipSMTP), _port(port)
                 {
                       #if defined (WIN32)
                        WSADATA WSAData;
                        erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
                         #else
                            erreur = 0;
                         #endif
     
     
                       // Création de la socket 
                        sock = socket(AF_INET, SOCK_STREAM, 0);
     
                        cout << "Creation de la socket. Serveur = " << ipSMTP.c_str() << "\n";
                        // Configuration de la connexion /
                        sin.sin_addr.s_addr = inet_addr(ipSMTP.c_str());
                        sin.sin_family = AF_INET;
                        sin.sin_port = htons(port);
                 }
     
                  ~Mail()
                  {
                       /* On ferme la socket précédemment ouverte */
                            closesocket(sock);
     
                            #if defined (WIN32)
                                WSACleanup();
                            #endif
                  }

  5. #5
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut
    Je ne peux me retenir, il ne faut quasiment jamais utilisé de membre public.
    Ben oui mais pourquoi?
    Un exemple tu fais une classe avec un membre idx, tu l'utilise dans 147 de ton programme, et puis le client te dit mais moi je suis pas développeur mes index ne débute pas à 0 mais à 1. Soit tu fais 147 +1 dans ton code, mais la tu est tres con, soit tu change dans l'initialisation de l'index, mais dans ton code sa risque de mal se passer. Soit tu as fait un acceseur, et c'est trop de la bombe de balle et tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Bidon
    {
    private:
        int _idx ;
    public:
        int getIdx() const { return _idx+1; } //c beau non ?
        void setIdx(int idx) { _idx = idx - 1 ; }
    };

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut
    Citation Envoyé par themadmax Voir le message
    Je ne peux me retenir, il ne faut quasiment jamais utilisé de membre public.
    Ben oui mais pourquoi?
    Un exemple tu fais une classe avec un membre idx, tu l'utilise dans 147 de ton programme, et puis le client te dit mais moi je suis pas développeur mes index ne débute pas à 0 mais à 1. Soit tu fais 147 +1 dans ton code, mais la tu est tres con, soit tu change dans l'initialisation de l'index, mais dans ton code sa risque de mal se passer. Soit tu as fait un acceseur, et c'est trop de la bombe de balle et tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Bidon
    {
    private:
        int _idx ;
    public:
        int getIdx() const { return _idx+1; } //c beau non ?
        void setIdx(int idx) { _idx = idx - 1 ; }
    };
    Oui je suis d'accord avec toi concernant la portée des attributs, ici je n'ai pas chercher à réfléchir mais effectivement je vais les passer en private ou protected et créer des getter et setter en cas de besoin.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/08/2011, 09h22
  2. erreur: expected ‘)’ before ‘*’ token
    Par troumad dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 12/10/2010, 21h24
  3. Réponses: 5
    Dernier message: 01/02/2010, 14h06
  4. "expected ';' before '(' token" étrange
    Par argonath dans le forum C++
    Réponses: 10
    Dernier message: 31/01/2010, 12h11
  5. Réponses: 1
    Dernier message: 21/03/2009, 16h04

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