草庐IT

recursive_directory_iterator

全部标签

c++ - 从 boost::filesystem::is_directory 捕获异常

我目前正在捕获来自boost::filesystem::is_directory的错误,并通过在异常上调用“what()”向用户显示错误。这给出了失败的原因,但错误对用户来说很奇怪。例如:boost::filesystem::is_directory:Accessisdenied我如何捕获boost错误并找出实际原因,以便显示更好的错误消息? 最佳答案 “更好的错误信息”是指类似的东西吗#include#includeintmain(){boost::filesystem::pathp("/proc/1/fd/1");try{boo

C++ 模板 std::vector::iterator 错误

在C++中,我试图获得std::vector::iterator对于我的模板类。但是,当我编译它时,出现错误:errorC2146:syntaxerror:missing';'beforeidentifier'iterator',errorC4430:missingtypespecifier-intassumed.Note:C++doesnotsupportdefault-int.我也收到警告:warningC4346:'std::vector::iterator':dependentnameisnotatype:#includetemplateclassv1{typedefstd::

c++ - 可以安全地存储 list::iterator 供以后使用吗?

假设我有一个列表,其中没有添加或删除新节点。但是,节点可能会被打乱。保存一个迭代器,指向列表中的一个节点,并在以后任意时间访问它是否安全?编辑(后续问题):list::splice()的文档说它从参数列表中删除元素。这是否意味着如果我调用splice,使用相同的列表作为函数的参数,现有的迭代器将失效? 最佳答案 是的。迭代器进入列表的标准受赠者不会失效,除非他们指向(比喻地说)的项目从列表中删除。从这个页面:http://www.sgi.com/tech/stl/List.htmlListshavetheimportantprope

c++ - Visual Studio 2012 : C++ compiler ignoring user-specified include directories

我遇到常见错误fatalerrorC1083:Cannotopenincludefile:'afxres.h':Nosuchfileordirectory。搜索引擎为此显示了很多匹配项,但没有一个建议的解决方案对我有用。通常这看起来是路径问题。所以,我确保安装了相关的库,并找到了文件。使用绝对路径作为#include工作正常:#include"C:\ProgramFiles(x86)\MicrosoftVisualStudio11.0\VC\atlmfc\include\afxres.h"但是,如果我将目录(C:\ProgramFiles(x86)\MicrosoftVisualStu

c++ - 为什么 reverse_iterator 双重定义其嵌套类型?

似乎迭代器适配器reverse_iterator双重定义了它的大部分嵌套类型。特别是,它公开继承自std::iterator,它公开了iterator_category、value_type、difference_type、指针和引用。除了iterator_category和value_type外,这些都在类定义中再次显式typedef。24.5.1.1类模板reverse_iterator[反向迭代器]namespacestd{templateclassreverse_iterator:publiciterator::iterator_category,typenameiterato

c++ - 移动到未初始化的内存,或者 raw_storage_iterator 是如何工作的

我想将一系列对象移动到未初始化的内存中(使用移动构造)。由于std::uninitialized_copy没有move-counterpart,我想到了两个选项:使用std::move和raw_storage_iterator,或求助于手动循环:T*dest=get_memory();//optiononestd::move(first,last,std::raw_storage_iterator(dest));//optiontwofor(autoi=first;i!=last;++i,++dest){new(dest)T(std::move(*i));}第一个选项会执行移动构造(因

c++ - std::ostream_iterator 未找到运算符<<

我已经声明了一个operator对于std::pair:std::ostream&operator&p){o我想在打印数据时使用这个运算符:std::vector>data;std::copy(data.begin(),data.end(),std::ostream_iterator>(std::cout,"\n"));但是编译器说,nomatchforoperator...我做错了什么? 最佳答案 std::copy找不到operator的重载对于std::pair在std命名空间。没有什么好办法,重载operator对于来自st

c++ - Visual Studio 2012 : 'opencv2/opencv.hpp' : No such file or directory (C1083)

这个问题问了好几次,有一些答案,但是这个问题比较具体,附加目录路径设置正确(找到文件)。尽管如此,构建我的项目时出现以下错误:fatalerrorC1083:Cannotopenincludefile:'opencv2/opencv.hpp':Nosuchfileordirectory但我可以右键单击文件并在visualstudio2012中打开它吗?我试过:1)指定完整路径:可行!#include2)将文件放到C:\不起作用!(add.目录添加)3)具有相同包含语法的空项目。(添加目录)。成功了!4)我用CMake配置了同一个项目的VS2010版本,但我遇到了同样的问题。任何可能导致

c++ - 为什么将 set::iterator 而不是 const_iterator 传递给函数会违反单一定义规则?

std::set的描述容器givenbycppreference.com最后包含此注释:Themembertypesiteratorandconst_iteratormaybealiasestothesametype.Sinceiteratorisconvertibletoconst_iterator,const_iteratorshouldbeusedinfunctionparameterliststoavoidviolationsoftheOneDefinitionRule.我不明白最后这句话。我的理解是一个集合不允许修改它的元素(如果你需要改变一个,你必须erase它然后inse

c++ - 运行时错误 : map/set iterators incompatible

我在第8行遇到运行时错误“map/setiteratorsincompatible”。voidManager::Simulate(Military*military,Shalishut*shalishut,char*args[]){Simulation*simulation=Simulation::GetInstance();Time*time=Time::GetInstance();multimap::iteratoritTasks;itTasks=simulation->GetTasks().begin();while(itTasks!=simulation->GetTasks()