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

Langage C++ Discussion :

Template G++-7 error: expected primary-expression before ‘>’ token


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut Template G++-7 error: expected primary-expression before ‘>’ token
    Bonjour à tous,

    Avec G++-7 J'ai cette erreur:
    error: expected primary-expression before ‘>’ token
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         T_Mesh mesh = loader.LoadfromFile<Vertex>(inFilePath);
                                                 ^
    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    template <typename T_Mesh, typename T_Loader>
    void LoadComputeExport(vs::Shader &inShader, const std::string &inFilePath, const po::variables_map &inVm)
    {
        T_Loader loader;
     
        using Vertex = typename T_Mesh::Vertex;
     
        T_Mesh mesh = loader.LoadfromFile<Vertex>(inFilePath);
     
        Export<T_Mesh>(vs::Compute(mesh, inShader), inVm);
    }

    Voici un appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LoadComputeExport<vs::obj::yocto::Mesh, vs::obj::Loader>(shader, file_path, vm);
    Ce que ça veux dire:
    Je souhaite charger un fichier «obj» dans une Mesh de la librairie yocto. Je veux lui appliquer un shader et l'exporter (le choix du format d'export étant figé).

    Voici une déclartion de LoadFromFile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            class M_LIB_DLL_EXPORT Loader : public vs::Loader
            {
                public:
                    Loader();
                    ~Loader();
     
                    template<typename T_Vertex>
                    vs::Mesh<T_Vertex> LoadfromFile(const std::string &inFilePath);
            };
     
            template<>
            vs::obj::yocto::Mesh vs::obj::Loader::LoadfromFile(const std::string &inFilePath);
    Je fait appel à une spécialisation d'une fonction de classe. Remarque: Cette spécialisation sera bien exporter dans la DLL.

    Si je n'essaie pas de factoriser mon chargement/calcul/export, l'appel à LoadFromFile fonctionne très bien.
    En voici un appel sans factorisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef vs::Mesh<vs::obj::yocto::Vertex> Mesh;
    Mesh mesh = obj_loader.LoadfromFile<Mesh::Vertex>(vm[Options::input_obj].as<std::string>())
    Auriez vous une idée de comment corriger cela. Le message de g++ ne dit pas ce qu'il considère avoir entre les chevrons. Donc je sais pas ce que mon Vertex a de mal.

  2. #2
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    Même erreur avec cette implémentation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template <typename T_Vertex, typename T_Loader>
    void LoadComputeExport(vs::Shader &inShader, const std::string &inFilePath, const po::variables_map &inVm)
    {
        T_Loader loader;
     
        using Mesh = typename vs::Mesh<T_Vertex>;
        using Vertex = typename Mesh::Vertex;
     
        Mesh mesh = loader.LoadfromFile<Vertex>(inFilePath);
     
        Export<Mesh>(vs::Compute(mesh, inShader), inVm);
    }
    ou celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    template <typename T_Vertex, typename T_Loader>
    void LoadComputeExport(vs::Shader &inShader, const std::string &inFilePath, const po::variables_map &inVm)
    {
        T_Loader loader;
     
        typedef typename vs::Mesh<T_Vertex> Mesh;
        typedef typename Mesh::Vertex Vertex;
     
        Mesh mesh = loader.LoadfromFile<Vertex>(inFilePath);
     
        Export<Mesh>(vs::Compute(mesh, inShader), inVm);
    }

  3. #3
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    Voici la réponse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mesh mesh = loader.template LoadfromFile<Vertex>(inFilePath);
    Maintenant je dois étudier pourquoi.

  4. #4
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    Une réponse au pourquoi du comment que j'ai trouvé ici:
    https://stackoverflow.com/questions/...ember-function

    According to C++'03 Standard 14.2/4:

    When the name of a member template specialization appears after . or -> in a postfix-expression, or after nested-name-specifier in a qualified-id, and the postfix-expression or qualified-id explicitly depends on a template-parameter (14.6.2), the member template name must be prefixed by the keyword template. Otherwise the name is assumed to name a non-template.

  5. #5
    Invité
    Invité(e)

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

Discussions similaires

  1. error: expected primary-expression before 'int'
    Par moniroje dans le forum Débuter
    Réponses: 6
    Dernier message: 23/03/2014, 20h15
  2. Réponses: 2
    Dernier message: 16/11/2011, 11h25
  3. Réponses: 2
    Dernier message: 08/02/2010, 10h00
  4. Réponses: 3
    Dernier message: 15/05/2009, 16h18
  5. expected primary-expression before '=' token
    Par steph_p dans le forum Débuter
    Réponses: 4
    Dernier message: 02/02/2009, 16h03

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