假设我有一个文件X.h,它定义了一个类X,其方法在X.cc中实现。文件X.h包含一个文件Y.h,因为它需要Y来定义类X。在X.cc中,我们可以引用到Y,因为X.h已经包含Y.h。我还应该在X.cc中包含Y.h吗?我知道我不需要,我可以依靠标题保护来防止多重包含。但一方面,包含Y.h使X.cc更独立于X.h(不能当然完全独立)。公认的做法是什么?另一个例子:包括在.h和.cc文件中。我看到有些人这样做而有些则没有。 最佳答案 最小化。在header中,更喜欢前向声明而不是完整定义。例如,使用iosfwd而不是ostream。也就是说,
所以,我有点希望这最终会成为一个简单的答案,但我已经研究了一段时间,但似乎无法解决这个问题。所以我有一个特定的类,Intersection,当包含在任何其他header中时,它会给我:错误C2061:语法错误:标识符“Intersection”这是我的路口标题:#ifndefINTERSECTION_H#defineINTERSECTION_H#include"Coord.h"#include"Road.h"#include"TrafficLight.h"classIntersection{private:intid;Coord*midPoint;Road*northRoad;Road
假设我在互联网上找到了一个非常好的开源库,现在我想将它用于我自己的项目。我下载它,可能会编译它并获取头文件和静态/动态库。所以我开始编写自己的源文件,当然,当我想使用这个外部库的功能时,我会将它的正确header包含到我的源文件中。现在我编译我的源文件,确保这个外部库的包含路径和链接器选项设置正确。而且我收到大量错误,所有错误都来自外部header。结果他们需要一些编译器标志。如何找出必须设置的最少编译器标志(以便能够从外部库编译header)?到目前为止我是怎么想的:在源代码的构建脚本中查找它们(可能非常困难,因为有很多地方可以定义它们并且它们可能不是最小标志,因为它们可能是所有he
我设置了buildbot以使用/analyze标志编译我的Qt/C++应用程序。然而,分析也在深入研究我不关心的qt头文件:c:\qt\qt-everywhere-opensource-src-4.8.1\src\corelib\tools\qvector.h(547):warningC6011:DereferencingNULLpointer'x.p':Lines:474,475,476,477,478,480,491,493,497,498,499,500,503,504,518,519,520,521,522,525,545,547批量排除这些文件的最佳方法是什么?(请注意我没有
这是this的后续问题上面写着InC++,unlikeC,standardheadersareallowedto#includeotherstandardheaders.有什么方法可以知道哪些header被自动包含在内,因为可能很难猜测哪些符号定义在哪些header中。动机:我的家庭作业在我的电脑上编译并正常工作,但助教告诉我它没有编译并且需要几个头文件(互斥锁和算法)来编译。我如何确定我以后提交的代码是无懈可击的。我的编译器没有给出任何关于隐式声明的警告。我正在使用clang++-std=c++11来编译我的代码。 最佳答案 该标
考虑以下构造://!Templatedsingleton./*!Templatewrapperenforcingthesingletonbehavior.*/templateclassTSingleton{private://!Singletoninstancepointer.staticT*instance;//!privateconstructor.TSingleton(){}//!privateemptycopyconstructor.TSingleton(constTSingleton&sourceObject){}public://!Staticsingletoninstan
我有一个Qt应用程序,我为我的应用程序使用qDebug消息。然而我已经变得懒惰了,留下了一大堆:#include在我的头文件中。我应该为生产部署删除它们吗?它会带来什么好处? 最佳答案 您不应该删除标题包含。如果这样做,每个涉及qDebug的语句都可能会产生编译器错误。相反,在编译发布时定义符号QT_NO_DEBUG_OUTPUT。当定义该符号时,qDebug将不执行任何操作,并且(希望)编译器将优化对不执行任何操作的函数的调用。 关于c++-我应该删除QDebugheader以进行发布
我需要提交作业,但我只想包含我实际使用的boost的头文件(我使用了boost::shared_ptr和boost::function)。我试着手动这样做,但我遗漏了一些头文件,每次我去添加它们时,结果发现我遗漏了更多。有没有一种快速简便的方法可以准确找出我实际需要的header?谢谢 最佳答案 bcp命令就是为此而生的:NAMEbcp-extractsubsetsofBoostSYNOPSISbcp--list[options]module-listbcp[options]module-listoutput-pathbcp--re
考虑以下头文件示例:shared_example.h#ifndefSHARED_EX#defineSHARED_EXconstintShared_Int=1;constchar*Shared_CString="Thisisastring";#endifshared_example.h文件包含在多个编译单元中,这导致链接器(正确地)提示:错误LNK2005:“charconst*constShared_CString”(?Shared_CString@@3PBDB)已在First_Compilation_Unit.obj中定义从此文件中删除Shared_CString常量可消除此问题。所
当此解决方案使用.lib文件而不是.dll文件时,此方法没有错误。除了一个当前使用预编译header的项目外,我拥有所有项目,没有错误。预编译头称为“LudoGlobal.h”。我试图将最后一个项目链接到这个预编译的头文件(它存在于一个单独的“核心”项目中),但我收到以下错误:Error4fatalerrorC1083:Cannotopenprecompiledheaderfile:'....\Output\LudoSound\Debug\LudoSound.pch':Nosuchfileordirectoryludosoundmanager.cpp1对于每个.cpp文件。为什么是这样