草庐IT

p_adts_header

全部标签

c++ - 交叉引用和循环依赖。 header 间接包含自身

可放置的.h#include"selectable.h"classplaceable:selectable{..};可选择的.h#include"game.h"classselectable{..};游戏.h#include"placeable.h"classgame{...classplaceable*holding;...};基本上placeable.h包含selectable.h,其中包含game.h,而game.h又包含placeable.h。我能想到的唯一解决方案是将placeable*放在一个新的header中,使其成为静态/全局的,然后将这个新header包含在game.

c++ - 包含在 header 或 cpp 中——Qt 中首选的是什么

当我写一个C++类时,我只在头文件中包含了特定情况。我更喜欢前向声明,我相信这是C++中的最佳实践。但是Qt类通常有很多属于标准Qt类的字段,因此将它们全部写在前向声明中似乎不是一个好主意。有什么首选方法吗?Qt有大量的文档,所以我认为它已经回答了我的问题,但我才刚刚开始阅读它。 最佳答案 我的规则是头文件只包含那些定义相关头文件使用的功能的文件。假设您在header中有指向某个类Foo的指针和引用,但header从未插入或实例化这些对象。在这种情况下,您不需要类的定义。您只需要一个前向声明。另一方面,如果您插入类型为Foo的对象,

c++ - 在编译时防止 header 包含在某些文件中?

我有一个头文件,我可以控制它的内容。此外,我还有一个接口(interface)I1(在其他文件中定义),各种派生的实现。我想禁止那些实现包括这个头文件。这样在编译期间,如果包含该文件,编译将失败,否则它将照常继续。所以我有头文件和接口(interface)定义(在其他文件中)。我要禁止在编译期间包含给定头文件的接口(interface)实现。关于我如何实现这一点有什么建议吗?我可以使用一些巧妙的模板/预处理技巧吗? 最佳答案 在头文件中:#ifndefFOO_IMPLEMENTATION_USE_ONLY#errorThisfile

c++ - 什么是仅 header 库

这个问题在这里已经有了答案:WhatdoesBoostmeanby"header-onlylibraries"and"automaticlinking"?(2个答案)关闭7年前。我正在为我的下一个项目使用boostC++库,文档说它是一个只有头文件的库。MostBoostlibrariesareheader-only:theyconsistentirelyofheaderfilescontainingtemplatesandinlinefunctions,andrequirenoseparately-compiledlibrarybinariesorspecialtreatmentwh

c++ - 在 header C++ 中初始化变量

编辑:更正函数名称,并添加#pragmaonce这是对我的问题的一个非常强大的简化,但是如果我这样做:啊啊#pragmaoncestaticinttestNumber=10;voidchangeTestNumber();A.cpp#pragmaonce#include"A.h"voidchangeTestNumber(){testNumber=15;}B.h#pragmaonce#include"A.h"//someotherstuffB.cpp#pragmaonce#include"B.h"//someotherstuff主要.cpp#pragmaonce#include"B.h"#

c++ - 如何将 Boost header 与 Jetbrains Appcode 一起使用

我通过MacPorts在我的Macbook上安装了Boost库,想知道如何配置AppCode来识别标题。我尝试右键单击项目->添加框架和库->其他...->浏览到/opt/local/include->选择但这不是似乎没有将Boost添加到列表中。有没有人成功让Boost与AppCode一起工作? 最佳答案 万一其他人通过谷歌偶然发现了这个:涉及三个步骤:右键单击该项目并选择AddFrameworksandLibraries,然后选择Other,然后浏览所有dylib。由于我通过brew安装了boost,dylib位于/usr/lo

c++ - 读取PNG header 的宽度和高度

我正在尝试读取PNG文件的宽度和高度。这是我的代码:structTImageSize{intwidth;intheight;};boolgetPngSize(constchar*fileName,TImageSize&is){std::ifstreamfile(fileName,std::ios_base::binary|std::ios_base::in);if(!file.is_open()||!file){file.close();returnfalse;}//SkipPNGfilesignaturefile.seekg(9,std::ios_base::cur);//First

c++ - 函数原型(prototype) vs 在 cpp 中包含 header

我有做一些工作的功能。啊啊voiddoSomething(intn);A.cpp#include"A.h"voiddoSomething(intn){/*something*/}如果我想在另一个源文件中使用这个函数,最好的选择是什么:1)包含A.hB.cpp#include"A.h"voidanotherTask(){//...doSomething(5);//...}2)或使用前向声明(函数原型(prototype)):B.cppvoiddoSomething(int);voidanotherTask(){//...doSomething(5);//...}关于尽可能多地为类使用前向

c++ - C++ 中的 header 保护问题

刚开始自己​​写header,但迫于需要,必须学习一下。我正在写一个标题,我正在尝试理解标题保护。包含的头文件前后有一个或两个下划线有区别吗?举个例子:x.h//x.h#ifndef__X_H_INCLUDED__#define__X_H_INCLUDED__//functionsnstuff#endif对比://x.h#ifndef_X_H_INCLUDED_#define_X_H_INCLUDED_//functionsnstuff#endif一个比另一个更正确还是更不正确?有区别吗? 最佳答案 根据C++1117.6.4.3.

C++ "size_t"不需要 "cstddef" header ?

我正在通过C++Primer这本书学习C++,它说“size_t”在“cstddef”header中定义,但在本练习中:#includeusingnamespacestd;intmain(){intar[10];for(size_tx=0;x没有包含header,VisualStudio2017(和c++shell)编译程序没有错误。 最佳答案 size_t真的是一个灰色地带。std::size_t是sizeof的结果类型,但是sizeof是一个内置运算符,您可以在没有任何#include的情况下使用根本。考虑这个完整的小程序://