Partage
  • Partager sur Facebook
  • Partager sur Twitter

undefined reference

    8 mars 2024 à 18:46:29

    Bonjour,

    Je suis en train de travailer avec une bibliothèque matricielle que j'ai trouvée ur GitHub, la bibliotheque Tiger (https://github.com/hosseinmoein/Tiger)

    je voulais juste l'utiliser et la modifier un peu pour un projet perso sauf que je n'arrive même pas à la faire fonctionner.

    le code :

    int main()
    {
        DDMatrix dmat (8, 8);
        std::cout << dmat.determinant();
    
        return 0;
    }

    l'erreur :

    C:\Users\Yolo974\Desktop\CodeBlocks\Test2.0\main.cpp|17|undefined reference to `hmma::Matrix<hmma::DenseMatrixBase, double>::operator()(unsigned int, unsigned int)'|

    Les fichiers complets du header et du code de la bibliothèque Matrix.h étant vraiment longs pour le confort de votre lecture je met juste ici le code important :

     Matrix.h (extrait) :

    #pragma once
    
    #include <future>
    
    #include "DenseMatrixBase.h"
    #include "SymmMatrixBase.h"
    
    // ----------------------------------------------------------------------------
    
    namespace hmma
    {
    
    template<template<class T> class BASE, class TYPE = double>
    class   Matrix : public BASE<TYPE>  {
    
    public:
    
        using BaseClass = BASE<TYPE>;
        using size_type = typename BaseClass::size_type;
        using value_type = typename BaseClass::value_type;
        using reference = typename BaseClass::reference;
        using const_reference = typename BaseClass::const_reference;
        using pointer = typename BaseClass::pointer;
        using const_pointer = typename BaseClass::const_pointer;
    
    public:
    
        inline Matrix() = default;
    
        inline Matrix (size_type row,
                       size_type col,
                       const_reference def_value = value_type ()) noexcept
            : BaseClass (row, col, def_value)  {   }
    
        inline reference operator() (size_type r, size_type c) noexcept;
        inline const_reference operator() (size_type r, size_type c) const noexcept;
    };
    
    // ----------------------------------------------------------------------------
    
    typedef Matrix<DenseMatrixBase, double>       DDMatrix;
    typedef Matrix<DenseMatrixBase, long double>  DLDMatrix;
    typedef Matrix<SymmMatrixBase, double>        SDMatrix;
    typedef Matrix<SymmMatrixBase, long double>   SLDMatrix;
    
    } // namespace hmma

    Matrix.cpp (extrait) :

    #include <math.h>
    #include <algorithm>    // std::max and min
    
    #include "MathOperators.h"
    #include "Matrix.h"
    
    // ----------------------------------------------------------------------------
    
    namespace hmma
    {
    
    template<template<class T> class BASE, class TYPE>
    inline typename Matrix<BASE, TYPE>::reference
    Matrix<BASE, TYPE>::operator () (size_type r, size_type c) noexcept  {
    
        return (BaseClass::at (r, c));
    }
    
    } // namespace hmma
    



    Je précise tout de même qu'à la base le cpp etait un tcc dont j'ai recopié le code  dans un cpp que j'ai mis dans mon projet car juste ajouter le tcc au projet ne marchais pas. Je suis sur Code::Blocks.



    • Partager sur Facebook
    • Partager sur Twitter
      8 mars 2024 à 22:00:42

      Yolo974 a écrit:

      Je précise tout de même qu'à la base le cpp etait un tcc dont j'ai recopié le code  dans un cpp que j'ai mis dans mon projet car juste ajouter le tcc au projet ne marchais pas. Je suis sur Code::Blocks.


      Tu ne dois pas faire ça. Les fichiers tcc en question contiennent l'implémentation de templates, ça n'a pas de sens de les mettre dans des cpp. Cette librairie est mal fichue, elle requiert que tu définisses DMS_INCLUDE_SOURCE afin que les fichiers tcc soient correctement inclus par les fichiers .h: https://github.com/hosseinmoein/Tiger/blob/4a6d0d1294d81e0d6e9037466bac6f2de1458695/CMakeLists.txt#L54

      • Partager sur Facebook
      • Partager sur Twitter

      undefined reference

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown