2016-05-15 2 views
0

J'ai eu problème avec inclut dans le studio visuel. Je veux compiler le projet à la fois pour Windows et Linux.Visuel studio inclure la visibilité

en studio visuel, je me suis une petite classe dans le fichier .hpp, qui utilise std::exception et std::is_pod<T>, mais je ne comprend pas type_traits ni stdexcept !! Et le fichier se compile parfaitement avec Visual Studio! Pourquoi?

Ce faisant, sur linux me donne l'erreur

In file included from Packet.hpp:3:0, 
       from AbstractPacketFactory.hpp:2, 
       from AuthenticationPacketFactory.hpp:2, 
       from AuthenticationPacketFactory.cpp:1: 
ByteSerializer.hpp: In member function ‘byte_serializer& byte_serializer::operator>>(T&)’: 

linux g ++ est correct - pourquoi visual studio plus me prévenir? Y a-t-il quelque chose que je puisse faire à ce sujet? J'utilise VS comme IDE principal et je voudrais éviter une telle surprise à l'avenir (actuellement il y a 50 erreurs comme ça ...)

+2

Il n'y a aucune exigence pour la bibliothèque standard C++ pour ** pas ** inclure d'autres fichiers, aussi longtemps que la règle as-if est valide. La bibliothèque standard C++ fournie avec Visual Studio (quelle version utilisez-vous quand même?) Semble inclure des fichiers d'en-tête pour sa propre implémentation. Si vous avez besoin de résoudre ce problème, vous ne pouvez rien faire d'autre que de le compiler pour toutes les plates-formes de destination. – IInspectable

+1

Ils sont probablement inclus par un autre en-tête standard que vous avez inclus. – drescherjm

Répondre

-1

Vos projets Visual Studio peuvent être configurés pour utiliser les en-têtes précompilés à utiliser. stdafx.h est là quand vous utilisez l'en-tête précompilé.

Supprimez simplement stdafx.h des en-têtes précompilés et vérifiez si la compilation réussit sous Windows.

Vous pouvez trouver les en-têtes précompilés dans Propriétés du projet> C++> En-tête précompilé.

Si vous souhaitez effectuer des projets multiplate-forme, vous devez supprimer ce paramètre précompilé.

+0

Vous n'incluez pas le fichier d'en-tête précompilé dans d'autres ** en-têtes **. Et le code compile déjà avec Visual Studio. Votre solution proposée est une solution à un problème qui n'existe pas. En outre, si vous souhaitez conserver votre code multiplate-forme, vous devez ** configurer correctement ** votre environnement de construction (et utiliser des en-têtes précompilés). Le commutateur de compilateur [/ FI (Name Forced Include File)] (https://msdn.microsoft.com/en-us/library/8c5ztk84.aspx) est ce que vous utiliseriez sur Visual Studio lors de l'utilisation de fichiers d'en-tête précompilés, sans y compris le fichier d'en-tête précompilé (stdafx.h par défaut). – IInspectable

0

j'ai eu une fonction où je fait une erreur:

static_assert(std::is_pod<T>, "T must be a POD"); 

Vous devez l'utiliser avec ::value ou () - studio encore visuel std::is_pod<T> sans compile aucun avertissement. Et c'était la raison de l'erreur avalanche ...