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

Visual C++ Discussion :

MSVC 7.1 : erreur C1001, ligne 2701


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut MSVC 7.1 : erreur C1001, ligne 2701
    J'ai une belle erreur de compilation sous MSVC 2003/7.1
    J'ai trouvé une explication, mais je ne trouve pas comment réparer mon code.
    Voici l'explication : http://www.thescripts.com/forum/thread264827.html

    Donc maintenant, la déclaration de la fonction template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      template<template <class, unsigned int, unsigned int> class MatrixType, class DataType, unsigned int Height, unsigned int Width, unsigned otherHeight, unsigned otherWidth>
      const typename MatrixType<bool, (Height == 0 ? otherHeight : Height), (Width == 0 ? otherWidth : Width)>::ComparisonResult operator==(const MatrixType<DataType, Height, Width>& lhs, const MatrixType<DataType, otherHeight, otherWidth>& rhs)
    Je pensais avoir mis les bons arguments à la fonction, mais peut-être pas...
    Ce code compile sans pb avec GCC4.1, et ce n'est que ce soir que j'ai essayé de remettre à jour la version Windows...
    Je pense que c'est là car l'erreur de compilation est à une ligne qui utilise cette fonction, et c'est la seule opération - un if -, mais même avec l'aide, je n'arrive pas à savoir comment virer cette erreur.
    Je ne suis pas trop chaud pour remettre l'opérateur dans une classe, acr il faudrait que je l'implémente dans pas mal de classes qui ont la même gueule que celle-ci.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Bon, apparemment, c'est typique du 7.1 parce que le 8 ne bronche pas... En même temps, maintenant, le 8 n'est même plus capable de résoudre des boost::bind que le 7.1 résolvait
    N'emp^che que ça ne m'explique pas le problème du 7.1 avec mon code !

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Tu ne dis pas d'où vient ton problème exactement.
    -du template template parametre?
    -de la déclaration de ta fonction?

    Tu veux bien écrire un programme minimum et je te le testerai sur mon compilateur (ICL: Intel C++ for Windows).
    Ca peut valoir le coup de compiler avec VC 2005 Express, j'ai l'impression très nette que microsoft a rattrappé une bonne partie de son retard en ce qui concerne la conformité au standard.

    Au cas ou ton problème vient du "template template", je sais que GCC outrepasse le standard (en bien d'après moi). J'ai eu à ce sujet des problèmes avec ICL, qui ne voulait pas anticiper la norme.

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Effectivement, je n'ai pas été assez clair
    En fait le compilo rend l'âme au moment de l'instanciation de la fonction. Dans quand j'ai eu mon
    le compilo a cessé de fonctionner

    L'erreur ne vient que du compilateur MSVC7.1, les autres passent sans problème avec ce code, c'est apparemment presque connu comme erreur, mais je n'ai pas eu de solution. Quant à essayer un programme minimaliste, je vais essayer, mais je ne promets rien. MAis vraimenr rien vu les centaines de lignes de code de la bibliothèque - t'en sais quelque chose avec ta bibliothèque matricielle -

    Merci pour ta réponse

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    A 1ère vue c'est peut-être dû à ton paramètre template calculé (j'ai encore jamains utilisé cet opérateur dans un template). Je vois pas pourquoi le reste ne marcherait pas, même sur VC7.1
    Height == 0 ? otherHeight:Height
    J'ai déjà utilisé la technique consistant à utiliser des "classes meta", du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template<int cond,class A, class B> struct IF {};
    template<class A,class B> struct IF<0, A, B> { typedef B RET; };
    template<class A,class B> struct IF<1, A, B> { typedef A RET; };
    template<int m,int n> struct LOWER   { enum { RET=(m<n)?1:0 }; };
    template<int m,int n> struct GREATER { enum { RET=(m>n)?1:0 }; };
    Tu pourrais essayer de faire une classe pour l'opérateur "?:" et de l'utiliser comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    template<int cond,int a,int b> struct QUESTION_MARK { enum { RET=(cond)?a:b }; };
     
    MatrixType<QUESTION_MARK<...>::RET>

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Effectivement, pour ces calculs un peu répétitifs de choix du paramètre, je pourrai utiliser un enum. Je vais vérifier si ça vient de ça, mais je ne crois pas J'ai vu d'autres opérations plus farfelues que celle-ci
    C'est vraiment une spécificité MSVC7.1 cette erreur.

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    C'est vraiment une spécificité MSVC7.1 cette erreur.
    Malheureusement pas la seule

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/03/2007, 16h05
  2. recuperation d'erreur en ligne de commande
    Par stross dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 04/07/2006, 10h28
  3. [C++.NET] erreur "aucune ligne"
    Par raboin dans le forum VC++ .NET
    Réponses: 11
    Dernier message: 15/05/2006, 17h34
  4. [VB6] Erreur : la ligne n'est pas disponible
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/03/2006, 14h53
  5. Erreur à la ligne 1 du fichier de configuration de MySQL
    Par MacReiben dans le forum Installation
    Réponses: 1
    Dernier message: 09/02/2006, 18h23

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