草庐IT

include-guards

全部标签

c++ - Eclipse CDT : How to reference 3rd party includes via a Relative path

我是Eclipse-CDT的新手,第一次建立一个新项目。我正在尝试引用Boost而不硬编码绝对路径。我已将boost放入我的工作区文件夹中,例如/home/user/workspace/boost_1_39_0然后我希望添加一个包含目录,指向相对于工作区的该文件夹,但Eclipse不会这样做,它似乎只想指向/home/user/workspace/[MyProjectNameHere]有什么建议吗?将Boost复制到我的项目文件夹中似乎没有意义,因为它会出现在Eclipse中并且Eclipse想要构建它(当然,我可以排除它)。亚历克斯 最佳答案

c++ - 可以将标准的纯 C header #include 指令放在命名空间中吗?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Isitagoodideatowrapan#includeinanamespaceblock?我有一个类log的项目在全局命名空间(::log)中。所以,很自然地,在#include之后,每次我尝试实例化日志类的对象时,编译器都会给出一条错误消息,因为用许多三字母方法污染全局命名空间,其中之一是对数函数log().所以有三种可能的解决方案,每一种都有其独特的丑陋副作用。将日志类移动到它自己的命名空间,并始终使用它的完全限定名称访问它。我真的想避免这种情况,因为记录器应该尽可能方便使用。写一个mathwrapp

c++ - 是否将 unique_lock 用于可以由 lock_guard 完成的任务较慢?

我对lock_guard存在的原因感到困惑。是吗:比unique_lock更简单的界面?比unique_lock性能更好?还有什么? 最佳答案 lock_guard可以用一个状态单元来实现:指针或对它已锁定的Mutex类型的引用。unique_lock必须保持该状态,并且知道当前是否被锁定,因为unique_lock可以有一个Mutex未锁定。这意味着它必须至少有一个额外状态的bool。lock_guard围绕获取和释放Mutex提供了一个零开销的RAII锁定/解锁包装器。基本上lock_guard意味着没有理由避免使用RAII来处

c++ - C++ 标准是否需要 `#include <math.h>` 来定义 `abs` 中的 `<cmath>` 重载?

C++标准在中定义了一些重载函数。不属于的headerC中的header(因为C没有重载)。其中有floatabs(float),doubleabs(double),longdoubleabs(longdouble),和doubleabs(Integral).另一方面,abs未在C中定义完全没有(它在中),唯一的签名是intabs(int).现在在我的系统上,当使用带有C++程序的C++编译器时,#include不提供C++abs重载,在全局命名空间或std中.另一方面,#include定义std::abs.这正是我所期望的——包含C版本以获取C函数,并包含C++版本以获取C++函数。

c++ - 使用 boost::lock_guard 进行简单的共享数据锁定

我是Boost库的新手,我正在尝试实现一个在共享队列上运行的简单生产者和消费者线程。我的示例实现如下所示:#include#include#includeboost::mutexmutex;std::dequequeue;voidproducer(){while(true){boost::lock_guardlock(mutex);std::coutlock(mutex);if(!queue.empty()){std::cout这段代码按我的预期运行,但是当main退出时,我得到/usr/include/boost/thread/pthread/mutex.hpp:45:boost::

c++ - 编译器如何知道在哪里可以找到#include <stdio.h>?

我想知道MacOSX、Windows和Linux上的编译器如何知道在哪里可以找到C头文件。具体来说,我想知道它如何知道在哪里可以找到带有的#include括号。#include"/Users/Brock/Desktop/Myfile.h"//absolutereference#include//systemrelativereference?我假设它所咨询的系统上有一个文本文件。它如何知道在哪里寻找标题?是否可以修改此文件,如果可以,此文件位于操作系统的什么位置? 最佳答案 编译器构建后,它知道一些标准位置来查找头文件。其中一些与编

c++ - Visual Studio 2013 : fatal error C1083: Cannot open include file: 'winsock2.h' : No such file or directory

我将一些“native”c++项目从Windows7上的VisualStudio2010迁移到Windows8.1上的VisualStudio2013。重建给了我这个错误。我意识到我没有安装WindowsSDK,所以我接下来安装了它,但我仍然收到错误消息。还有其他人在其他干净的VS项目迁移中得到这个吗? 最佳答案 我在SDK文件夹下搜索了丢失的文件并找到了它。因为SDK是在我迁移项目后安装的,所以路径未包含在我的项目中。我能够通过添加到我的包含和库路径来解决所有问题。我将以下文件夹添加到我的包含路径中:$(WindowsSdkDir

c++ - 错误 : 'cout' : undeclared identifier; though I've included iostream header file in program

我正在尝试编译下面的简单程序。但是,它没有编译并给出错误:errorC2065:'cout':undeclaredidentifier我想问你,为什么我已经在其中包含了iostream头文件,这个程序却不能运行?#includevoidfunction(int){cout提前致谢。 最佳答案 cout流在std命名空间中定义。所以命名它你写:std::cout如果你想把它缩短为cout那么你可以写usingnamespacestd;或usingstd::cout;在写cout之前。任何好的文档来源都会告诉您哪个命名空间包含一个对象。

c++ - 第一次锁定和创建 lock_guard(adopt_lock) 和创建 unique_lock(defer_lock) 和锁定有什么区别?

我找到了以下两段代码:http://en.cppreference.com/w/cpp/thread/lockvoidassign_lunch_partner(Employee&e1,Employee&e2){//usestd::locktoacquiretwolockswithoutworryingabout//othercallstoassign_lunch_partnerdeadlockingus{//misthestd::mutexfieldstd::unique_locklk1(e1.m,std::defer_lock);std::unique_locklk2(e2.m,st

c++ - 我的 C++ 编译器在哪里解决我的#includes?

这是一个非常基本的问题。我一直在学习C++,到目前为止我只使用了标准库。我一直在包含之类的内容并且没有问题。现在我想使用ApacheXerces,所以我已经将它安装在我的机器(一个Debian系统)上,并且正在遵循一个说我需要包含的教程:#include但是g++说“错误:xercesc/sax2/SAX2XMLReader.hpp:没有这样的文件或目录”。它在看哪里?我需要提供更多信息吗?谢谢。 最佳答案 使用--verbose选项:[...]#include"..."searchstartshere:#includesearch