2016-05-15 12 views
0

Ich bekam Problem mit umfasst in Visual Studio. Ich möchte das Projekt sowohl für Windows als auch für Linux kompilieren.Visual Studio einschließlich Sichtbarkeit

in Visual Studio, habe ich eine kleine Klasse in .hpp-Datei, die std::exception und std::is_pod<T> verwendet, aber ich type_traits noch stdexcept nicht enthalten !! Und die Datei kompiliert einfach mit Visual Studio! Warum?

tun so auf Linux gibt mir Fehler

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 ++ ist richtig - warum Visual Studio mich nicht gewarnt? Kann ich etwas dagegen tun? Ich verwende VS als meine primäre IDE und möchte solche Überraschungen in Zukunft vermeiden (derzeit gibt es 50 Fehler wie diese ...)

+2

Es gibt keine Voraussetzung für die C++ - Standardbibliothek ** nicht ** andere Dateien einzuschließen, solange die Als-wenn-Regel gilt. Die C++ - Standardbibliothek, die im Lieferumfang von Visual Studio enthalten ist (welche Version verwenden Sie trotzdem?) Scheint Headerdateien für die eigene Implementierung zu enthalten. Wenn Sie das beheben müssen, können Sie nichts anderes tun, als es für alle Zielplattformen zu kompilieren. – IInspectable

+1

Diese sind wahrscheinlich von einer anderen Standard-Header enthalten, die Sie enthalten haben. – drescherjm

Antwort

-1

Ihre Visual Studio-Projekte könnten für die Verwendung vorkompilierter Header konfiguriert sein. stdafx.h ist vorhanden, wenn Sie den vorkompilierten Header verwenden.

Entfernen Sie einfach stdafx.h aus vorkompilierten Headern und sehen Sie, ob die Kompilierung in Windows erfolgreich ist.

Vorkompilierte Header finden Sie unter Projekteigenschaften> C++> Vorkompilierter Header.

Wenn Sie plattformübergreifende Projekte erstellen möchten, sollten Sie diese vorkompilierte Einstellung entfernen.

+0

Sie fügen die vorkompilierte Header-Datei nicht in andere ** Header ** ein. Und der Code wird bereits mit Visual Studio kompiliert. Ihre vorgeschlagene Lösung ist eine Lösung für ein Problem, das nicht existiert. Wenn Sie Ihren Code plattformübergreifend behalten möchten, müssen Sie außerdem ** Ihre Build-Umgebung korrekt konfigurieren (und vorkompilierte Header verwenden). Der Compiler-Schalter [/ FI (Name erzwungene Include-Datei)] (https://msdn.microsoft.com/en-us/library/8c5ztk84.aspx) wird in Visual Studio verwendet, wenn vorkompilierte Header-Dateien ohne verwendet werden einschließlich der vorkompilierten Header-Datei (standardmäßig stdafx.h). – IInspectable

0

bekam ich eine Funktion, wo ich einen Fehler gemacht:

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

Sie es mit ::value oder () verwenden müssen - noch Visual Studio ohne Vorwarnung std::is_pod<T> es kompiliert. Und das war der Grund der Fehlerlawine ...

Verwandte Themen