C++ VisualStudio包含可见性
我对VisualStudio中的include有异议。我想为windows和linux编译这个项目 在visual studio中,我在.hpp文件中得到了一个很小的类,它使用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
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)。