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 :

problème pour appeler une fonction avec Eigen


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Architecte systèmes
    Inscrit en
    Mai 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 32
    Par défaut problème pour appeler une fonction avec Eigen
    Bonjour à tous,

    J'ai écrit une fonction pour importer des datas et les ranger dans une matrice avec la librairie Eigen.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    template <class Eigen>
    constexpr
    Eigen::matrix<float, unsigned, unsigned> 
    importation(std::string file_name)
    {
            ...
    	return matrice;
     
    };
    Mais lorsque j'appelle la fonction, visual studio me renvoie une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Eigen::Matrix<float, 300, 4>   matrice;
     
    matrice = importation(file_name);
    "aucune instance de modèle de fonction "importation" ne correspond à la liste d'arguments"

    Est-ce que vous auriez une idée d'où ça peut venir? Parce que là je ne vois pas

    Mango1

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Il faut savoir que, assez bizarrement, le type de retour des fonctions n'est pas utilisé dans la détermination de la fonction qui est utilisée.

    Comme tu veux renvoyer une Eigen::matrix<float, unsigned, unsigned>, il faut donc que les paramètres template de ta fonction permettent de déterminer que le retour de la fonction sera une matrice contenant des float, ainsi que le nombre de lignes et le nombre de colonnes de cette matrice

    Et, en plus, il faudra t'assurer que l'appel de la fonction fournisse "tout ce qu'il faut" au compilateur pour qu'il soit en mesure de ... connaitre ces informations.

    Ta fonction devrait donc plutôt prendre la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template <typename VAL, size_t ROWS, size_t COLS>
    Eigen::matrix<VAL, ROWS, COLS> import(std::string const & filename){
     
        return matrix;
    }
    et l'appel se ferait sans doute sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    auto result = import<float,300, 4>("fichier.txt");
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Salut,

    Ou tu le met en référence de sortie et non en retour de fonction

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Citation Envoyé par Astraya Voir le message
    Salut,

    Ou tu le met en référence de sortie et non en retour de fonction
    Oui, effectivement ...

    Cependant, je t'avouerai que je ne suis pas vraiment fan de l'idée de transmettre une référence non constante à une fonction, "simplement" à cause de l'effet de bord.

    Cela a beau n'être qu'un avis strictement personnel, je trouve l'approche -- issue de la programmation fonctionnelle -- qui consiste à ne jamais modifier une donnée entrante particulièrement saine, malgré tous les reproches qu'on puisse faire à ce sujet, notamment en termes d'utilisation de la mémoire.

    Ce n'est pas pour rien si je suis l'un des rares à rajouter "idéalement constante / immuable" lorsque j'explique ce qu'est une classe ayant sémantique de valeur

    Ceci étant dit, j'ai beau revendiquer le fait de "ne pas être particulièrement fan" de l'idée d'un paramètre de sortie, ce n'est quand même pas au point d'essayer d'empêcher les gens de les utiliser dans leur propre code
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Oui ce n'était pas pour éviter l'effet de bord. Lorsque je vois une fonction qui prend un nom de fichier, je m'attends à avoir en retour un code d'erreur ou un booléen en cas d'échec de lecture du fichier, même si une exception est lancée.

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

Discussions similaires

  1. Utiliser une touche pour appeller une fonction
    Par Hide dans le forum Langage
    Réponses: 2
    Dernier message: 13/10/2005, 16h59
  2. Réponses: 7
    Dernier message: 10/09/2005, 16h49
  3. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 11h30
  4. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 14h54
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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