草庐IT

C-Header

全部标签

c++ - cmath header 混淆

数学函数的命名空间是什么?全局还是std?考虑cos功能。它有3个重载。但也有来自math.h的遗留cos。C对函数重载一无所知。因此cos(x)无法解析为cos(float)。解决方案是显式调用单精度版本cosf(x)。我错过了什么吗? 最佳答案 通过包含可以获得相同的功能和在C++中,唯一的区别是命名空间。IE。包括也会给你带来过载。理论上,在C++03中,使用在使用时为您提供在全局命名空间和std命名空间中定义的符号为您提供在std命名空间中而不是在全局命名空间中定义的符号。实践是不同的,C++0X使理论与实践保持一致。在使用

c++ - 将仅包含 C++ header 的模板编译为共享库

我正在研究模板类的代码库。它只是header(没有.cpp文件)。我想隐藏实现并提供一个共享库以及几个仅包含声明的header。不幸的是听起来没有意义。既然没有编译过的代码,那么这样一个共享库里会放什么呢?编译后尝试从header中删除定义会导致undefinedreference。有没有一种方法可以强制编译器在dll或共享库中传送对象而不必显式实例化模板类? 最佳答案 不,在可预见的future没有也不会有办法做到这一点。提供模板C++代码的唯一方法是仅作为头文件。Modules可能会改变这一点,但这不太可能在您的图书馆完成之前发

c++ - C/C++ : header file not found

一些头文件存在于/src/dir1/中(例如:a.h、b.h、c.h等)。我的源文件存在于/src/dir2/file.cpp中.我使用了一些存在于/src/dir1/中的头文件但是在编译过程中我得到了类似headerfilenotfound的错误.然后我将包含路径更改为#include"../src/dir1/a.h",然后错误消失在file.cpp但我得到notfound/src/dir1中存在的头文件中存在错误.因为我包含了头文件说a.h,那a.h包含了一些存在于/src/dir1/中的其他头文件(比如b.h和c.h出现在a.h中)。如何在a.h中添加头文件(/src/dir2/

c++ - 我应该使用单个 header 来包含所有静态库 header 吗?

我有一个用C++构建的静态库。我把它分成许多头文件和源文件。我想知道是否最好将库的客户端可能需要的所有header包含在一个头文件中,然后他们可以将其包含在他们的源代码中,或者只让它们包含他们需要的header?这会导致代码不必要地臃肿吗?我不确定未使用的类或函数是否仍会编译到他们的产品中。感谢您的帮助。 最佳答案 请记住,您编译的每个源文件都涉及编译器的独立调用。每次调用时,编译器都必须读入每个包含的头文件,对其进行解析,并建立一个符号表。当您在许多源文件中使用其中一个“includetheworld”头文件时,它会显着影响您的构

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