C++ VisualStudio包含可见性

C++ VisualStudio包含可见性,c++,visual-studio,portability,C++,Visual Studio,Portability,我对VisualStudio中的include有异议。我想为windows和linux编译这个项目 在visual studio中,我在.hpp文件中得到了一个很小的类,它使用std::exception和std::is_pod,但我没有包括type_traits或stdexcept!!而且该文件在VisualStudio中编译得很好!为什么? 在linux上这样做会给我带来错误 In file included from Packet.hpp:3:0, fro

我对VisualStudio中的include有异议。我想为windows和linux编译这个项目

在visual studio中,我在.hpp文件中得到了一个很小的类,它使用
std::exception
std::is_pod
,但我没有包括
type_traits
stdexcept
!!而且该文件在VisualStudio中编译得很好!为什么?

在linux上这样做会给我带来错误

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&)’:

LinuxG++是正确的-为什么VisualStudio不警告我?有什么我能做的吗?我正在使用VS作为我的主要IDE,我希望在将来避免这样的意外(目前有50个这样的错误…

您的Visual Studio项目可能会配置为使用预编译头来使用。当您使用预编译头时,stdafx.h就在那里

只需从预编译头中删除stdafx.h,然后查看编译是否在windows上成功

可以在ProjyProjts> C++ ++ >预编译头中找到预编译头。
如果要进行跨平台项目,应删除该预编译设置。

我得到了一个函数,其中我犯了一个错误:

static_assert(std::is_pod<T>, "T must be a POD");
静态断言(std::is_pod,“T必须是一个pod”);
您必须将它与
::value
()
一起使用-但是visual studio编译
std::is_pod
时没有任何警告。这就是错误雪崩的原因。

只要C++规则成立,就不需要C++标准库不包含其他文件。使用VisualStudio(您使用的是什么版本?)的C++标准库似乎包含了其自身实现的头文件。如果您需要修复此问题,您只能为所有目标平台编译它。这些可能包含在您包含的其他标准头中。您不在其他头中包含预编译头文件。代码已经用VisualStudio编译过了。您提出的解决方案是对不存在的问题的修复。此外,如果您想保持代码跨平台,则必须正确配置构建环境(并使用预编译头)。编译器开关是在Visual Studio上使用预编译头文件时使用的开关,不包括预编译头文件(默认情况下为stdafx.h)。