关闭。这个问题是opinion-based。它目前不接受答案。想改善这个问题吗?更新问题,以便可以通过editingthispost用事实和引文来回答。7年前关闭。Improvethisquestion我是预编译头文件的新手,我只是想知道要包含什么。我们的项目有大约200个源文件。那么,我真的包括每个第三方库吗?如果我在三个源文件中使用map,我是否添加它?如果我用它一个,我要添加它吗?我需要删除旧的直接包含还是ifdef和pragmaonce指令仍然有效?有没有您不会添加的第三方库?预编译的头文件不会变得很大吗?就像在,即使是预编译的形式,突然将所有这些头文件都包含在内是不是有开销?
这可能有点难以完整解释。我已经为我正在编写的一系列C++库设置了一个目录结构。我打算使用CMake来处理构建这些库。大多数情况下,这些库是完全独立的“子系统”,但在奇怪的地方,一个库需要访问另一个库中包含的头文件。这是我的目录结构。base├─cmake├─docs├─examples└─sources├─libA│├─include││└─libA││├─core.h││└─*.h│├─source││└─*.cpp└─libB├─include│└─libB│├─message.h│└─*.h└─source└─*.cpp在一些地方有CMakeLists.txt文件。主要的是在根目
当我尝试运行这个程序时,我收到一个错误,该错误使程序停止并显示“vector下标超出范围”知道我做错了什么吗?#include#include#include#include#include#includeusingnamespacestd;//(intargc,char*argv[]intmain(){fstreambookread("test.txt");vectorwords;bookread.open("test.txt");if(bookread.is_open()){cout>input;//stringcleanedWord=preprocess(input);//cha
我已经编程了一段时间了,但我仍然没有完全弄明白的一件事就是您何时需要#include某些东西。我知道为了安全起见,只要您使用另一个文件中声明的内容,就可以这样做。然而,有时我发现我可以删除一个#include并且一切仍然可以正常编译。据我所知,这是因为包含的其他文件已经包含了外部定义。我有兴趣了解以下两种特殊情况的行为:假设我们有三个.h/.cc对:f1.h/.cc、f2.h/.cc和f3.h/.cc。如果f2.h/.cc包含f1.h而f3.h/.cc包含f2.h是否有必要让f3.h/.cc包含f1.h或者f1.h的所有定义是否对f3文件包含在f2中时?再次假设我们有三个.h/.cc对
我有两个包含文件头#include"stdafx.h"#include"psapi.h"但是它给出了无法打开源文件“stdafx.h”的编译时错误。我正在使用VisualStudios2010。是否需要“stdafx.h”?我认为是的,因为如果我把它拿走,程序将无法编译。 最佳答案 VisualStudio将其用于“预编译header”功能。如果您没有使用VisualStudio的经验,我建议将stdafx.h保留在项目中。当然,如果您#include它,您应该拥有它。 关于c++-无法
我在boost::spirit中有以下规则:typedefboost::tupleEntry;qi::ruleentry;entry=qi::int_>>qi::int_;但是第二个int没有写入元组。有没有办法让它工作而不必使用boost::fusion::tuple?如果我使用std::pair就可以,那么为什么我不能使用boost::tuple?这是一个完整的编译示例:#include#include#include#includenamespaceqi=boost::spirit::qi;//works://#include//typedefstd::pairEntry;//d
通过查看VS中的内存泄漏检测机制,想到了这个问题。需要以下样板代码:#define_CRTDBG_MAP_ALLOC#include#include但用DETECT_MLEAKS替换此代码:#defineDETECT_MLEAKS\#define_CRTDBG_MAP_ALLOC\#include\#include\做不到。是否有任何解决方法-建议? 最佳答案 //#defineDETECT_MLEAKS//Uncommenttodetectmem-leaks#ifdefDETECT_MLEAKS#define_CRTDBG_MAP
我使用的是基于TexasInstrumentsOMAP-L138的定制板,它基本上由基于ARM9的SoC和DSP处理器组成。它连接到相机镜头。我想做的是捕获发送到dsp处理器的实时视频流以进行H264编码,该编码通过8192字节的数据包通过uPP发送。我想使用Live555提供的testH264VideoStreamer通过RTSP直播H264编码视频。我修改后的代码如下所示:#include#include#include#include#include#include#include#include#include#include#include//toallowread()fun
#include#include#include#includeintmain(){autopms=std::promise();autoftr=pms.get_future();std::thread([&](){pms.set_value("helloworld");});ftr.wait();std::cout根据thislink,std::future::wait阻塞直到结果可用。但是,上面的代码不能打印任何东西。显然主线程在pms.set_value线程完成之前就已经完成了。为什么ftr.wait()不阻塞? 最佳答案 问
我对在MSVS中开发C/C++代码还很陌生,但让我感到困惑的一件事是,为什么在向我的项目添加一组源文件和头文件后,它们分别显示在MSVS文件夹下“源文件”和“头文件”,我随后是否必须告诉编译器我的头文件在“项目->属性->C/C++->常规”下的位置。在我看来,MSVS应该已经尝试通过首先查看我包含在项目中的头文件集来解决任何“包含“...””语句。有人愿意评论这里使用的逻辑吗?谢谢,特拉维斯 最佳答案 IDE使用项目文件来跟踪您的文件,但编译器无权访问该信息。包含文件路径在编译时传递给每个源文件。