2011-05-09 4 views
0

J'ai téléchargé le logiciel jsvm, et je reçois beaucoup d'erreurs lors de la compilation. Peu d'entre eux est comme suit.erreur de compilation dans la macro

/usr/include/c++/4.3/bits/algorithmfwd.h:248:41: error: macro "max" passed 3 arguments, but takes just 2 

Et le fichier algorithmfwd.h est comme suit

template<typename _Tp> 
const _Tp& 
min(const _Tp&, const _Tp&); 
template<typename _Tp, typename _Compare> 
const _Tp& 
min(const _Tp&, const _Tp&, _Compare); 

// min_element

+2

Votre erreur est pour 'max', vos émissions de code Smin '... – forsvarir

+1

Votre erreur si pour 'macro', le modèle de' vos émissions de code. – jv42

+1

En fait, l'erreur est pour une expansion de macro. Cela arrive avant même que les templates ne soient analysés (étape du préprocesseur). – MSalters

Répondre

1

Quelque part, vous avez défini une max macro, ce qui est interdit si vous inclure les en-têtes de la bibliothèque standard (qui a un ensemble de fonctions surchargées nommées max). Vous devrez trouver où cette macro est définie et vous en débarrasser. Deux possibilités immédiates viennent à l'esprit:

  • Vous avez défini comme une macro dans un de vos têtes. Débarrassez-vous de cela.
  • Microsoft ou définit (définie — Je n'ai pas vérifié VC10) à la fois `` min` et max` comme macros dans l'un de ses en-têtes. Ajoutez /DNOMINMAX à vos options de compilation pour supprimer cela.
  • Une autre bibliothèque que vous ne pouvez pas contrôler l'a définie. Enveloppez cette bibliothèques en-têtes des en-têtes privées, qui incluent l'en-tête de la bibliothèque, puis faites:
     
        #undef min 
        #undef max 
    
    Utilisez ces emballages au lieu de l'en-tête de la bibliothèque vous ont été donnés (et pression du fournisseur de bibliothèque pour corriger).
0

Il semble que, en plus des fonctions de algorithmfwd.h ont une macro de style préprocesseur a également nommé max . Essayez de trouver celui qui définit ceci et évitez d'inclure ces fichiers d'en-tête, ou utilisez #undef max si tout le reste échoue.

3

L'erreur est tout à fait explicite:

/usr/include/c++/4.3/bits/algorithmfwd.h:248:41: error: macro "max" passed 3 arguments, but takes just 2

Avant l'inclusion de cet en-tête particulier, vous avez défini une macromax qui prend 3 arguments. Les macros sont mal en ce qu'elles sont appliquées partout où l'identifiant apparaît. Vérifiez où dans le code vous définissez cette macro et supprimez-la, ou à tout le moins, changez-la en majuscule (convention commune pour les macros) afin qu'elle ne soit pas étendue dans tous les autres en-têtes.

0

Vous ne montrez pas la macro max. Quoi qu'il en soit, vous essayez d'utiliser une macro avec un paramètre de plus que ce qu'elle attend.

I am getting many errors while compiling

Essayez de résoudre vos erreurs dans l'ordre, car une erreur peut influencer la suivante.

Questions connexes