草庐IT

reference-counting

全部标签

c++ - 使用 GLFW3 编译,链接器错误 'undefined reference'

有一个使用GLFW3的最小示例:#includeintmain(intargc,constchar*argv[]){glfwInit();}...导致大量链接器错误:(小摘录)Undefinedsymbolsforarchitecturex86_64:"_CFArrayAppendValue",referencedfrom:_addJoystickElementinlibglfw3.a(cocoa_joystick.m.o)"_CFArrayApplyFunction",referencedfrom:__glfwInitJoysticksinlibglfw3.a(cocoa_joyst

c++ - 使用 const 键类型引用调用 std::set of pointers 的 count 方法

我有一个类structS{boolfoo(constAType&v)const{returnvalues.count(&v);//compileerrorduetotheconstnessofv}private:std::setvalues;};这是一个简化版本。在实际代码中,foo做了一些复杂的事情。代码产生错误invalidconversionfrom‘constAType*’to‘std::set::key_type{akaAType*}’我认为foo应该采用'constAType&v'因为它不会改变v。成员变量“values”的类型不能为std::set,因为结构S的某些方法调

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

什么是undefinedreference/未解析的外部符号错误?常见原因是什么以及如何修复/预防它们? 最佳答案 编译C++程序需要几个步骤,如2.2(creditstoKeithThompsonforthereference)所指定的那样:Theprecedenceamongthesyntaxrulesoftranslationisspecifiedbythefollowingphases[seefootnote].Physicalsourcefilecharactersaremapped,inanimplementation-

c++ - 编译器/链接器错误 "undefined reference"

您好,我刚开始学习C++。我买了这本大C++forDummies书,并且一直在阅读它。到目前为止真的很有趣,但现在我被困住了。我一直在谷歌搜索这个问题,但无济于事。我正在使用我正在使用带有GNUGCC的代码块10.05。我不断收到一条错误消息:Infunction'main':undefinedreferenceto'SafeCracker(int)'代码并不复杂。我是新来的,非常沮丧。我不想跳过这一部分;我想知道发生了什么事。主要内容:#include#include"safestuff.h"usingnamespacestd;intmain(){cout功能:#includeusi

c++ - std::reference_wrapper 何时转换为 T&?

考虑以下代码:#include#includeusingnamespacestd;templatevoidfun(Tt){t+=8;}intmain(){inti=0;fun(ref(i));cout此代码打印“8”。我假设fun()中的t自动转换为int&。但是如果我用t=8替换t+=8,程序将无法编译。为什么? 最佳答案 reference_wrapper有一个到T&的隐式转换运算符,所以它会被转换成T&无论哪里T&是比reference_wrapper更好的匹配.在扩充赋值表达式中,唯一可行的运算符是int&operator+

c++ - valarray 上 STL 算法 "count"的返回类型是什么

我正在使用VisualStudio2010Pro在Windows764bit上机器,我想使用count(来自header)在valarray上:intmain(){valarrayv(false,10);for(inti(0);i上面程序的输出是正确的:4但是我想将值分配给变量并使用int导致编译器警告精度损失。自valarray没有迭代器,我不知道如何使用iterartor::difference_type.这有可能吗? 最佳答案 Num的正确类型会是:typenameiterator_traits::difference_typ

c++ - 为什么C++标准要为std::bitset::reference指定一个析构函数?

我想知道为什么std::bitset::reference和std::vector::reference指定一个显式析构函数(不是编译器生成的析构函数)。因为,例如,boost::dynamic_bitset::reference似乎没有指定这样的析构函数。 最佳答案 只是因为标准提到了~reference()作为析构函数,并不意味着它必须作为空操作由用户提供{}(这就是libstdc++和SGI/STL的做法)。它也可以由用户声明为=default,甚至是隐式定义(libc++就是这样做的)。无论如何,可以更新标准以删除对析构函数

c++ - "move semantics"和 "rvalue reference"的 Visual Studio 实现

我看到了一个关于c++11并发性的Youtube视频(第3部分)和以下代码,它在视频中编译并生成了正确的结果。但是,我在使用VisualStudio2012时遇到此代码的编译错误。编译器提示toSin(list&&)的参数类型.如果我将参数类型更改为list&,编译的代码。我的问题是move(list)返回了什么在_tmain(),它是右值引用还是只是一个引用?#include"stdafx.h"#include#include#include#include#includeusingnamespacestd;voidtoSin(list&&list){//this_thread::s

将 shared_ptr 传递给 lambda 时的 C++ 内存管理

考虑以下C++代码:voidf(std::functionfunc){func();}voidg(std::shared_ptrmyObjPtr){myObjPtr->someMethod();}voidh(std::shared_ptrmyObjPtr){f([=](){g(myObjPtr);});}有没有内存泄漏?我的理解是myObjPtr被复制到lamba中并增加了它的引用计数。然后它被复制到g()中,引用计数再次递增。g()完成后,shared_ptr的引用计数会减少。然后在f()中执行func()之后,shared_ptr的引用计数再次减少。所以我认为这段代码使引用计数保持

c++ - 设计着色器类

自从我开始学习OpenGL以来,我想我还不如编写一个小型C++框架(为我自己)来避免过度使用C-ish代码显然造成的恶心。:)由于我打算坚持使用Qt,因此该框架使用了一些Qt类。我真正需要的第一件事是使用着色器和程序的简单方法。这是我对着色器类的想法。classShader{public://createashaderwithnosourcecodeexplicitShader(GLenumshaderType);//createashaderwithsourcecodeandcompileitShader(GLenumshaderType,constQString&sourceCod