草庐IT

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++ 链接类定义中定义的方法

出于好奇,如果您将方法定义放在header中的类定义中,并且编译器没有内联它,那么在链接器阶段该方法被放入哪个或哪些目标文件以供访问?它是否放在每个包含header的.obj文件中,然后在链接器阶段丢弃额外的拷贝? 最佳答案 Isitputinevery.objfilethatincludestheheader,andthenextracopiesarethrownawayduringthelinkerphase?一般来说,是的。Seethispaper. 关于C++链接类定义中定义的方

c++ - 编译c++时链接自定义头文件

linux上用g++编译C++程序时,如何链接自己的头文件?例如我有一个包含以下内容的文件:#include#include#include#include#include"3DCurve.h"当我使用以下命令编译时:g++-lm-lglut-lGL-o3dcurveExample_8_1.cpp我收到以下错误:undefinedreferenceto'draw3Dcurve(double,double,double,double,double,double)'如何将3DCurve.h文件链接到编译器?头文件及其实现与我正在编译的文件位于同一文件夹中。我的理解是,如果它位于同一个文件夹

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++ - 错误 C4430 缺少类型说明符 - 假定为 int。注意 : C++ does not support default-intGenerator

我对以下代码有疑问:生成器.h:#pragmaonceclassGenerator{public:friendclassBagObject;Generator(void);~Generator(void);...voidgenerator(int);private:BagObject*object;vectordata;//Errorc4430};这是一个错误:errorC4430:missingtypespecifier-intassumed.Note:C++doesnotsupportdefault-int还有6个错误,但我相信在解决这个问题后它们应该会消失。这是cpp文件。第一次

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++ - 代码块无法识别它编写的类的标题?

我目前正在编写一个小类来在Ubuntu11.10上的代码块10.05中用C++实现Smith-Waterman算法,虽然我在Windows上的代码块上遇到了完全相同的问题,但我添加了一个具有新类选项的类它似乎生成了有效的.h和.cpp文件。但是当我尝试在smithwaterman.cpp中编译时,它在它写的那行中给我一个错误#include"smithwaterman.h"说它不能找到文件。我可以清楚地看到项目中的文件位于include/smithwaterman.h并且我尝试放置include/但它没有帮助,如果我将它包含在它的完整路径中然后它看到了,但这似乎是一个非常不优雅的解决方

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

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