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++/CLI Discussion :

Problème de constructeur de template lors d'une assignation


Sujet :

C++/CLI

  1. #1
    Acropole
    Invité(e)
    Par défaut Problème de constructeur de template lors d'une assignation
    Bonjour,

    J'ai l'erreur suivante :

    Erreur 14 error C2664: 'Collada::Array<T>::Array(const Collada::Array<T> &)'*: impossible de convertir le paramètre 1 de 'Collada::Source *const ' en 'const Collada::Array<T> &' c:\dev\neurocom\collada\sources\core\dataflow\source.cpp 45
    et voici la ligne 45

    m_Bool = new Array<bool>(this);
    m_Bool étant défini comme ceci dans la classe Source :

    Array<bool> * m_Bool;
    le seul constructeur d'Array disponible est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Array(ColladaObject * parent):
    	ColladaObject(parent)
    {
    };
    D'où il me sort que j'essaye de passer Source en tant qu'Array ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Heu, moi pas tout comprendre, mais :
    "this" est un objet de classe Source.

    bin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = new Array<bool>(this);
    tu passes bien une instance de Source.

  3. #3
    Acropole
    Invité(e)
    Par défaut
    Source hérite de ColladaObject, ce qui est demandé dans le constructeur.
    Je viens de résoudre le problème. J'ai corrigé un autre problème dans la classe Array et ce problème a disparu.
    Le fait que Visual Studio ne compile pas correctement les templates si on défini des trucs dans le fichier cpp ne simplifie pas les choses.
    J'ai tout mis dans array.h et ça passe.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Il n'y a pas de .cpp pour une classe template.
    Il faut utiliser des fichier ".inl".
    Et un .inl n'est pas un .cpp

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Acropole Voir le message
    Le fait que Visual Studio ne compile pas correctement les templates si on défini des trucs dans le fichier cpp ne simplifie pas les choses.
    Peut-on vraiment reprocher ça à Visual Studio..?
    Le code template ne doit pas être dans le cpp.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Acropole
    Invité(e)
    Par défaut
    Si on peut

    Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.
    et :

    Le compilateur ne prend pas en charge l'utilisation du mot-clé « export » comme indiqué dans le C++ standard sous
    Mais je me rend compte que je ne suis pas dans la bonne section C++. Je n'utilise pas .Net, uniquement le C+ standard, donc pas de .inl.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    .inl n'a strictement rien à voir avec .NET.
    Il n'y pas de classe template en .NET mais des classes génériques, ce n'est pas

    l'utilisation des .inl à la place des .cpp est une bonne pratique, multiplateforme, multi-compilateur, multi-machin etc...

    Que le mot-clé "export" (que je crois obsolète) ne soit pas supporté est une chose ; mais coller du code de classe template dans des .cpp, c'est bien cra-cra.

Discussions similaires

  1. Problème fonction qui s'ouvre lors d'une macro qui n'est pas en lien
    Par holaholahola dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/08/2014, 09h14
  2. Réponses: 2
    Dernier message: 17/07/2014, 08h08
  3. [BI4] Problème de transfert de profils lors d'une migration
    Par justine' dans le forum Administration-Migration
    Réponses: 2
    Dernier message: 28/09/2012, 09h11
  4. Problème de changement de bac lors d'une impression
    Par basic83 dans le forum AS/400
    Réponses: 4
    Dernier message: 14/03/2012, 11h16
  5. Réponses: 2
    Dernier message: 20/10/2005, 10h50

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