2010-05-11 2 views
1

Je voudrais créer la bibliothèque olb3d avec mon compilateur Visual Studio 2005, mais cela échoue en raison d'erreurs de modèle.expressions de modèle et visual studio 2005 C++

Pour être plus précis, l'expression suivante semble être un problème:

void function(T u[Lattice<T>::d]) 

Sur le site du projet est déclaré que prpably mon compilateur ne permet pas de telles expressions de modèle compliqué - il faut utiliser la gcc 3.4.1.

Ma question est maintenant s'il y a un moyen de mettre à jour mon compilateur vs C++ afin qu'il puisse gérer les expressions de modèle sur le niveau comme le gcc 3.4.1? Peut-être que ça aide si je reçois une nouvelle version de Visual Studio?

Vive C.

+0

Pouvez-vous poster un peu plus de code? Peut-être un extrait complet qui devrait compiler mais pas? –

+1

La partie 'Lattice :: d' semble totalement inutile, car les tableaux se désintègrent en pointeurs et la valeur entre' [] 'est simplement ignorée. (Peut-être vous ne publiez pas un vrai exemple.) – UncleBens

+0

Postez une description plus significative du problème. D'après ce que vous avez posté jusqu'à maintenant, il n'y a aucune raison de croire que * tout * compilateur sera capable de gérer votre code (au contraire, en fait). – AnT

Répondre

0

Le compilateur dit qu'il ne peut pas déduire le type de modèle. Vous pouvez toujours l'aider en spécifiant le type lui-même dans votre code.

foo<int>(some_int_array); 

Cependant, la partie entre [] qui trébuche vers le haut est complètement vide de sens. Les tableaux se désintègrent en pointeurs et la valeur est ignorée en premier lieu. Vous pouvez simplement commenter cette partie si c'est un vrai exemple.

Si vous prenez le tableau par référence, VC++ 2005 ne semble pas avoir de problème avec elle soit:

template <class T> 
void function(T (&arr)[Lattice<T>::n]); 

(Est-il possible que le cas qui ne compile pas est tellement inutile que personne n'ait jamais pris la peine de vérifier si des choses comme ça fonctionnent?)

+0

Vous avez absolument raison. Ils auraient dû écrire juste func (T * u) et cela aurait fonctionné ... mais la source de olb3d est pleine de ces déclarations de modèles bizarres ... Je suppose que je renoncerai à essayer de le compiler dans l'environnement windows. – chris

2

Acheter une nouvelle version de Visual Studio. 2005 est assez vieux et pas très conforme. Vous pouvez toujours tester le nouveau en premier en téléchargeant Visual C++ Express.

+0

J'ai essayé VS 2010 mais les erreurs du compilateur sont encore là ... le code modèle de olb3d semble être étrange ... – chris

Questions connexes