草庐IT

p_adts_header

全部标签

c++ - C++ 方法名称可以在 header 中由类名限定吗?

简单的问题,这是有效的C++吗:classFoo{voidFoo::doSomething();};问题的重点:在类声明内部中重复使用类名和方法名前的双冒号是否有效?我在编译使用g++4.2.3执行此操作的代码时遇到问题。在深入研究和更改代码之前,我很想在这里看到对描述语法的内容的引用。或者降级编译器;这确实是用g++3.3.6构建的。我得到的错误是(大致):Foo.h:3:error:extraqualification‘Foo::’onmember‘doSomething’我用Google搜索了一下,但找不到任何东西。我没有标准,即使我有,我也可能要花很长时间才能找到任何权威的东西

c++ - 清理遗留代码 "header spaghetti"

任何清理“headerspaghetti”的推荐做法编译时间慢(Linux/Unix)?在GCC中是否有任何等同于“#pragmaonce”的东西?(发现关于此的相互矛盾的消息)谢谢。 最佳答案 假设您熟悉“includeguards”(header开头的#ifdef..),另一种加快构建时间的方法是使用外部includeguards。它在“LargeScaleC++SoftwareDesign”中进行了讨论。这个想法是,经典的包含guard,与#pragmaonce不同,不会让您从第二次开始忽略header所需的预处理器解析(即它

在 header 中声明的c++私有(private)成员与在cpp文件中声明的静态变量

我有一个变量,我更喜欢在cpp文件而不是头文件中声明。它应该只能被该类的对象访问。该变量应该为该类的每个对象都有一个单独的拷贝。继承不是必须的。通常,我会在类定义中声明它。嗯:classA{private:intnumber;}但是,我可以这样做吗?B.h:classB{private://nothing}B.cpp:staticintnumber; 最佳答案 不,如果您采用第二种方法,您会将其设为静态变量,这意味着您不会为该类的每个对象拥有不同的拷贝(它们将共享该变量)。无论哪种方式,如果它只应该被那个类访问,它应该放在类声明中,

c++ - Visual Studio 2017 中的 Intellisense 可以建议包含 C++ header 吗?

我的背景主要是C#,多年来一直使用ReSharper。能够将我的光标放在未解析的引用上,按Alt+Enter,然后选择一个选项来添加适当的using语句是非常宝贵的。现在,VisualStudio2017原生具有此功能!有了这个(以及VS2017中添加的许多其他功能),我摆脱了ReSharper,享受了非常快速和响应迅速的VisualStudio体验。我最近开始用C++做一些工作,虽然我确实从Intellisense那里得到了关于字段和方法的建议,但当涉及到Unresolved引用时,它不会向#include建议任何header>.我的问题是VisualStudio2017是否添加了为

c++ - 寻找一种在运行时检测 valgrind/memcheck 而不包括 valgrind header 的方法

Valgrind/Memcheck可能很密集,会导致运行时性能显着下降。我需要一种方法(在运行时)检测它,以便禁用所有辅助服务和功能,以便在24小时内执行检查。我不希望将任何显式标志传递给程序,但那是一种方式。我尝试在符号表中搜索(通过abi调用)以查找valgrind或memcheck符号,但一无所获。我尝试检查堆栈(通过boost::stacktrace),但那里也什么也没有。 最佳答案 不确定在Valgrind下运行时有不同的行为是个好主意,因为Valgrind的目标是在预期使用情况下断言您的软件。无论如何,Valgrind不

c++ - Visual Studio 的预编译 header 包含什么?

问题涉及VisualStudio编译器创建的.pch二进制文件的内容。它包含什么?它只是头文件的解析树,还是目标代码?考虑这个例子://myheader.h#includeclassA{public:voidadd(inti){v.push_back(i);}private:std::vectorv;};将此header包含在要预编译的集合中会导致vector的完整模板实例被编译并添加到.pch中吗?提供更多背景信息;如果只有解析树被预编译,这意味着实例化模板的目标代码仍将在每个编译单元创建一次,从而导致编译和链接时间增加。因此,即使启用了预编译header,“统一构建”/减少编译单元

c++ - 如何在大约 v2.8.8 的 cmake 中轻松包含来自库依赖项的 header

我正在对C++存储库使用CMake进行一些试验,但我遇到了一些麻烦,试图在不使用大量额外CMake代码的情况下轻松地针对同一源代码树中的库构建应用程序。源码树的布局基本如下:ROOTlibs/lib1/lib2/lib3/apps/app1/app2/app3/库相互独立,应用程序可以链接到一个或多个库。目前我有一个根目录CMakeLists.txt,它将每个应用程序和库列为一个子目录,这样如果库被更改并且应用程序被重建,库也会被重建。这工作正常并且CMake链接它而无需我指定库所在的位置,但我没有看到对包含目录执行类似操作的方法。有没有通用的方法来处理这个问题?我不希望每个应用程序的

c++ - Visual Studio 2012 没有安装 C-Header?

我已经安装了VisualStudio2012并使用它工作了大约2周。但是现在我想开始一个C++项目(我通常是c#程序员)并且我写了一些简单的代码。之后我想编译它,但出现了很多错误……没有标准的c头文件。我做了什么:创建了一个新的Win32项目(空项目)使用这些创建的代码包括:#include#include#include#includeWindows.h是找到了,其余没有。有人有想法吗?我还查看了IncludeDirectories:$(VCInstallDir)include$(VCInstallDir)atlmfc\include$(WindowsSDK_IncludePath)

C++ - Zlib - header 和无 header 支持。有多可靠?

我目前正在开展一个大型项目,该项目可能每天使用C++中的zlib压缩/解压缩数千个文档。(我们的实现有zlib1.2.8)我们当前的实现支持带头和不带头的压缩文件,但是必须设置bool值“useZlibHeader”。我们的团队想知道是否有一种100%可靠的方法来确定header是否存在。根据此文档:https://www.ietf.org/rfc/rfc1950.txt据说“FCHECK值必须使得CMF和FLG,当被视为以MSB顺序存储的16位无符号整数(CMF*256+FLG)时,是31的倍数。”确实这是一个很好的检查,但有可能我们最终得到一个没有标题的压缩文件,但它的数据是(CM

c++ - 将 header 添加到项目设置中的每个文件(gcc -include)

我有一个项目使用gcc-includefile.h正如gcc文档所说,这确保了file.h包含在以这种方式编译的每个文件中(这意味着每个其他文件中都有#include"file.h")。现在我已经将这个项目导入到eclipse中,我在该文件所在的位置设置了包含路径,但无法弄清楚如何在eclipse项目设置中执行类似gcc-include的操作。这样做的结果是,在编辑器中我有很多“符号xy无法解析”,但项目编译得很好。感谢您的帮助。 最佳答案 您可以逐个项目更改CDTGCC内置编译器设置。转到项目->Properties->C/C++