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 :

décryptage erreur template


Sujet :

Langage C++

  1. #1
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut décryptage erreur template
    Bonjour,

    j'ai un bout de code qui ne compile pas et je ne m'en sors pas. Peut-être que quelqu'un aura une idée pour me débloquer.

    Je suis sous windows 7 avec visual studio 2010.

    Le compilateur ne semble pas parvenir à trouver la déclaration d'un type, dans une imbrication de templates, mais je n'arrive pas à comprendre qu'est-ce qui lui manque.

    Le bout de code qui pose problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template< typename TypeEquiangularVector >
    static void SaveSimpleModel( const TypeEquiangularVector & equiangular_vector )
    {
    	for (int i=0; i<equiangular_vector.GetVariables().n; ++i )
    Ainsi que le message d'erreur:
    1>h:\dev\rank_trunk\sources\rank\application\../UtilityRank/RankJSonReport.h(234): error C2228: left of '.GetVariables' must have class/struct/union
    1> type is 'Universe::EquiangularVectorIncremental<_TypeCorrelationTraits,_TypeCorrelationVector> '
    1> with
    1> [
    1> _TypeCorrelationTraits=Universe::CorrelationTraits<Universe::TransformedDataView<Universe::DataViewPartitioned<Universe::DataViewEnriched<double,Universe::InMemoryDataCompressed<bool>>>,VadisBLAS>>,
    1> _TypeCorrelationVector=Universe::CorrelationVectorAbsolute<VadisBLAS>
    1> ]
    1> h:\dev\rank_trunk\sources\rank\predictivemodel\LARS.h(179) : see reference to function template instantiation 'void GR::SaveSimpleModel<Universe::EquiangularVectorIncremental<_TypeCorrelationTraits,_TypeCorrelationVector>**>(const TypeEquiangularVector &,const Universe::UniverseDescription &)' being compiled
    1> with
    1> [
    1> _TypeCorrelationTraits=Universe::CorrelationTraits<Universe::TransformedDataView<Universe::DataViewPartitioned<Universe::DataViewEnriched<double,Universe::InMemoryDataCompressed<bool>>>,VadisBLAS>>,
    1> _TypeCorrelationVector=Universe::CorrelationVectorAbsolute<VadisBLAS>,
    1> TypeEquiangularVector=Universe::EquiangularVectorIncremental<Universe::CorrelationTraits<Universe::TransformedDataView<Universe::DataViewPartitioned<Universe::DataViewEnriched<double,Universe::InMemoryDataCompressed<bool>>>,VadisBLAS>>,Universe::CorrelationVectorAbsolute<VadisBLAS>> **
    1> ]
    1> h:\dev\rank_trunk\sources\rank\predictivemodel\FeatureSelectionLARS.h(42) : see reference to function template instantiation 'void PredictiveModel::LARS<_TypeTraits>::Run<PredictiveModel::LARSTraits<TypeValidation,TypeBLAS>::TypeTrivialStoppingCriterium>(const LARSSet &,bool)' being compiled
    1> with
    1> [
    1> _TypeTraits=PredictiveModel::LARSTraits<Universe::HoldOutValidation<Universe::TraitsHoldOutValidation<Universe::DataViewEnriched<double,Universe::InMemoryDataCompressed<bool>>>>,PredictiveModel::LinearRegression<bool>::TypeBLAS>,
    1> TypeValidation=Universe::HoldOutValidation<Universe::TraitsHoldOutValidation<Universe::DataViewEnriched<double,Universe::InMemoryDataCompressed<bool>>>>,
    1> TypeBLAS=PredictiveModel::LinearRegression<bool>::TypeBLAS
    1> ]
    1> h:\dev\rank_trunk\sources\rank\predictivemodel\FeatureSelectionLARS.h(32) : while compiling class template member function 'PredictiveModel::FeatureSelectionLARS<TypeValidation,TypeBLAS>::FeatureSelectionLARS(Universe::TransformedDataView<_TypeDataView,_TypeBLAS> &,const Configuration::Configuration &)'
    1> with
    1> [
    1> TypeValidation=Universe::HoldOutValidation<Universe::TraitsHoldOutValidation<Universe::DataViewEnriched<double,Universe::InMemoryDataCompressed<bool>>>>,
    1> TypeBLAS=PredictiveModel::LinearRegression<bool>::TypeBLAS,
    1> _TypeDataView=Universe::DataViewPartitioned<Universe::DataViewEnriched<double,Universe::InMemoryDataCompressed<bool>>>,
    1> _TypeBLAS=VadisBLAS
    1> ]
    1> h:\dev\rank_trunk\sources\rank\predictivemodel\LinearRegression.h(493) : see reference to class template instantiation 'PredictiveModel::FeatureSelectionLARS<TypeValidation,TypeBLAS>' being compiled
    1> with
    1> [
    1> TypeValidation=Universe::HoldOutValidation<Universe::TraitsHoldOutValidation<Universe::DataViewEnriched<double,Universe::InMemoryDataCompressed<bool>>>>,
    1> TypeBLAS=PredictiveModel::LinearRegression<bool>::TypeBLAS
    1> ]
    1> h:\dev\rank_trunk\sources\rank\predictivemodel\LinearRegression.h(440) : while compiling class template member function 'Universe::TransformedDataView<_TypeDataView,_TypeBLAS> *PredictiveModel::LinearRegression<TypeTarget>::Build(Universe::DataViewEnriched<_TypeEnrichment,_TypeInMemoryData> &,PredictiveModel::TargetTransformation *,const PredictiveModel::ValueToEstimateTransformation **,std::tr1::function<_Fty>)'
    1> with
    1> [
    1> _TypeDataView=Universe::DataViewEnriched<double,Universe::InMemoryDataCompressed<bool>>,
    1> _TypeBLAS=PredictiveModel::LinearRegression<bool>::TypeBLAS,
    1> TypeTarget=bool,
    1> _TypeEnrichment=double,
    1> _TypeInMemoryData=Universe::InMemoryDataCompressed<bool>,
    1> _Fty=PredictiveModel::ValueToEstimateTransformation *(Universe::TransformedDataView<Universe::DataViewEnriched<double,Universe::InMemoryDataCompressed<bool>>,PredictiveModel::LinearRegression<bool>::TypeBLAS> &)
    1> ]
    1> h:\dev\rank_trunk\sources\rank\application\../PredictiveModel/Builder.h(178) : see reference to class template instantiation 'PredictiveModel::LinearRegression<TypeTarget>' being compiled
    1> with
    1> [
    1> TypeTarget=bool
    1> ]
    1> h:\dev\rank_trunk\sources\rank\datadescription\../DataSource/TypedDataSourceModellingInvoker.h(92) : see reference to function template instantiation 'void PredictiveModel::Builder::Launch<DataSource::DataSourceModelling<_TypeTraits>>(void)' being compiled
    1> with
    1> [
    1> _TypeTraits=DataSource::TraitsDataSourceModelling<bool,DataSource::TypeEngine<TSV>::Type,PredictiveModel::TraitsValueToEstimate<SCORE_TO_PROBABILITY>::Type>
    1> ]
    1> h:\dev\rank_trunk\sources\rank\datadescription\../DataSource/TypedDataSourceModellingInvoker.h(55) : see reference to function template instantiation 'void DataSource::TypedDataSourceModellingInvoker<TypeDataSourceAction>::InvokeOnTargetType<TSV>(const DataSource::Description &,TypeDataSourceAction &)' being compiled
    1> with
    1> [
    1> TypeDataSourceAction=PredictiveModel::Builder
    1> ]
    1> h:\dev\rank_trunk\sources\rank\datadescription\../DataSource/TypedDataSourceModellingInvoker.h(50) : while compiling class template member function 'void DataSource::TypedDataSourceModellingInvoker<TypeDataSourceAction>::InvokeOnEngineType(const DataSource::Description &,TypeDataSourceAction &)'
    1> with
    1> [
    1> TypeDataSourceAction=PredictiveModel::Builder
    1> ]
    1> h:\dev\rank_trunk\sources\rank\application\../PredictiveModel/Builder.h(50) : see reference to class template instantiation 'DataSource::TypedDataSourceModellingInvoker<TypeDataSourceAction>' being compiled
    1> with
    1> [
    1> TypeDataSourceAction=PredictiveModel::Builder
    1> ]
    ça fait plusieurs heures que je suis dessus et je ne vois pas quel est le type qui pose problème. Avez-vous des conseils, des astuces, pour démêler ce sac de nœud?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Salut,

    Ne serais tu pas occupé à "jouer" avec une type_list qui exposerait la fonction GetVariables afin de permettre de récupérer la valeur d'un des types en question

    Si oui, je crois "simplement que le compilateur essaye de te demander gentiment de lui indiquer l'élément qu'il doit aller chercher, dont le type devra correspondre à un type personnalisé disposant d'un membre nommé n (qui devra, pour bien faire, etre de type int ou compatible).

    En gros, si je ne me trompe pas, il voudrait un code proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    template< typename TypeEquiangularVector >
    static void SaveSimpleModel( const TypeEquiangularVector & equiangular_vector )
    {
    	for (int i=0; i<equiangular_vector.GetVariables<XXX>().n; ++i )
    Ca te semble plausible
    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
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Au niveau conseil, essaye de voir si tu peux pas compiler ton code avec clang. Il donne souvent des messages d'erreur plus simples que g++ ou Vs.

    Apres, tu peux aussi te simplifier ton message a la mano a coup de sed et en virant ce qui est inutile.

    Enfin, il nous faudrait aussi le contexte de ce code, comment tu l'appelles/instancies avec quels types ...
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Ne serais tu pas occupé à "jouer" avec une type_list
    Non pas de liste de type. Et la fonction GetVariables() n'est pas une fonction template. Elle est membre d'une classe template, mais elle-même ne l'est pas.

    Citation Envoyé par Davidbrcz Voir le message
    Apres, tu peux aussi te simplifier ton message a la mano a coup de sed et en virant ce qui est inutile.
    C'est quoi sed?

    Citation Envoyé par Davidbrcz Voir le message
    Enfin, il nous faudrait aussi le contexte de ce code, comment tu l'appelles/instancies avec quels types ...
    Je ne peux raisonnablement pas entrer dans les détails, le code est trop complexe et trop volumineux. Je cherche juste des conseils/méthodes pour me débrouiller avec ce code bourré de templates et qui n'est ni commenté ni documenté; code qui n'est pas le mien, je précise. Si j'ai posté le message d'erreur, c'est surtout pour que vous ayez une idée de l'étendue du problème.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  5. #5
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Perso, 95% du temps quand je me prends un "left of '.GetVariables' must have class/struct/union" avec visual c'est lorsque mon objet est en fait un pointer et je me trompe en faisant un toto.foo() au lieu du correct toto->foo()

    En voyant cette partie du message d'erreur :

    1> h:\dev\rank_trunk\sources\rank\predictivemodel\LARS.h(179) : see reference to function template instantiation 'void GR::SaveSimpleModel<Universe::EquiangularVectorIncremental<_TypeCorrelationTraits,_TypeCorrelationVector>**>(const TypeEquiangularVector &,const Universe::UniverseDescription &)' being compiled

    J'ai l'impression que ça colle peut être avec ce problème de pointeur.

  6. #6
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut


    Bien vu...



    Si un modérateur veut supprimer la discussion, je n'y vois aucun inconvénient
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

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

Discussions similaires

  1. [SP-2010] Erreur Template : publishing.Navigation.PortalSiteMapDataSource
    Par diabli73 dans le forum SharePoint
    Réponses: 1
    Dernier message: 31/01/2013, 11h27
  2. Réponses: 1
    Dernier message: 07/03/2010, 11h27
  3. Réponses: 6
    Dernier message: 14/10/2009, 15h47
  4. template et erreur de link
    Par Willand dans le forum Langage
    Réponses: 12
    Dernier message: 05/12/2006, 22h19
  5. Erreur de template
    Par Clad3 dans le forum Langage
    Réponses: 4
    Dernier message: 13/03/2005, 16h22

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