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

SL & STL C++ Discussion :

[vector] Surcharge d'un opérateur "complexe"


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut [vector] Surcharge d'un opérateur "complexe"
    Bonjour à tous !

    J'utilise dans mon programme des vectors de vectors d'entiers ou de doubles, que j'aimerais pouvoir "multiplier" selon un algorithme maison. Pour alléger un peu mon code et me faciliter la vie, j'ai pensé à la surcharge d'opérateur. En replongeant des mes cours et en fouillant sur le net, j'ai trouvé comment surcharger un opérateur lorsqu'une des deux opérandes est une classe maison.

    Mais là ce que je veux faire c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <class T, class U>
    vector< vector< double > > operator*(const vector< vector< T > >& x, const vector< vector< U > >& y) {
       [...]
    }
    La déclaration me semble juste, mais mon problème, c'est où mettre ce code ? Je voulais le faire dans un fichier séparé, genre un fichier regroupant des fonctions utiles que je peux inclure où je veux, mais le compilateur n'a pas l'air d'apprécier .

    Quelqu'un a-t-il une idée ?

    Merci d'avance !

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Wookai Voir le message
    Bonjour à tous !

    J'utilise dans mon programme des vectors de vectors d'entiers ou de doubles, que j'aimerais pouvoir "multiplier" selon un algorithme maison. Pour alléger un peu mon code et me faciliter la vie, j'ai pensé à la surcharge d'opérateur. En replongeant des mes cours et en fouillant sur le net, j'ai trouvé comment surcharger un opérateur lorsqu'une des deux opérandes est une classe maison.

    Mais là ce que je veux faire c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <class T, class U>
    vector< vector< double > > operator*(const vector< vector< T > >& x, const vector< vector< U > >& y) {
       [...]
    }
    La déclaration me semble juste, mais mon problème, c'est où mettre ce code ? Je voulais le faire dans un fichier séparé, genre un fichier regroupant des fonctions utiles que je peux inclure où je veux, mais le compilateur n'a pas l'air d'apprécier .

    Quelqu'un a-t-il une idée ?

    Merci d'avance !
    Bonjour tes obligé de faire des vector de vector???

    Que te dit le compilot?

  3. #3
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut
    Oui, je suis obligé de faire des vector de vector, c'est ce qu'il y a de plus pratique pour les données que je manipule.

    Le compilateur me donne l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /usr/bin/ld: Undefined symbols:
    std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > > operator*<bool, double>(std::vector<std::vector<bool, std::allocator<bool> >, std::allocator<std::vector<bool, std::allocator<bool> > > > const&, std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > > const&)
    collect2: ld returned 1 exit status

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    La déclaration me semble juste, mais mon problème, c'est où mettre ce code ?
    Qui dit template dit déclaration et définition de la fonction dans l'entête ou alors inclusion de l'implémentation dans l'entête.
    http://cpp.developpez.com/faq/cpp/?p...VERS_templates

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Wookai Voir le message
    Oui, je suis obligé de faire des vector de vector, c'est ce qu'il y a de plus pratique pour les données que je manipule.

    Le compilateur me donne l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /usr/bin/ld: Undefined symbols:
    std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > > operator*<bool, double>(std::vector<std::vector<bool, std::allocator<bool> >, std::allocator<std::vector<bool, std::allocator<bool> > > > const&, std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > > const&)
    collect2: ld returned 1 exit status
    .... ok... Mais j'espere que c'est pas des matrice... ce serait pas terrible. SInon, même remarque que aoyou.

  6. #6
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut
    Ok, mais le fait que ce soit une surcharge d'opérateur d'une classe "externe" (vector) ne change rien ?

    Sinon, ça pourrait être faisable avec des matrices je pense, mais je préfère rester à cette implémentation. Par contre, pour une prochaine fois, vous auriez fait avec quoi comme lib ? Je connais newmat, qui est mal mal (surtout pour les stats, ya pas mal de choses déjà faites).

    Merci pour vos réponses en tous cas !

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Wookai Voir le message
    Ok, mais le fait que ce soit une surcharge d'opérateur d'une classe "externe" (vector) ne change rien ?
    dsl je ne comprend pas trop ce que tu veut dire

    Citation Envoyé par Wookai Voir le message
    Sinon, ça pourrait être faisable avec des matrices je pense, mais je préfère rester à cette implémentation. Par contre, pour une prochaine fois, vous auriez fait avec quoi comme lib ? Je connais newmat, qui est mal mal (surtout pour les stats, ya pas mal de choses déjà faites).

    Merci pour vos réponses en tous cas !
    Pour les matrice, ca depend ce que tu en fait. Tu peut regarder blitz++ ou Boost.MultiArray par exemple.

Discussions similaires

  1. Surcharge de l'opérateur new
    Par :Bronsky: dans le forum C++
    Réponses: 17
    Dernier message: 27/10/2010, 21h33

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