草庐IT

弱引用

全部标签

c++ - 如何正确声明自引用模板类型?

如何声明引用自身的模板类型?templateclassAnimal{public:TgetChild();}有了这个,我得到了一个关于缺少类型说明符的编译器错误。我尝试转发声明Animal,但没有成功。我正在尝试施加类型约束。一个Lion只能有一个Lion作为child,一个Bear有一个Bear,等等。编辑我将发布实际类(class)的一部分。它是可以出现在链表中的类的模板:template>classLinked{private:T*m_prev;T*m_next;}我想强制该类只能指向同一类(或子类)的对象。 最佳答案 在这种

c++ - 如何将float值传递给以double为引用值的函数

我有一个函数,其原型(prototype)如下所示:voidexample(double&var);但是,我的问题是我可能还需要使用一些浮点值来调用函数。例如floattemp=10.1;example(temp)如果我这样做,我的代码不会编译,可能是因为将浮点值传递给双引用变量。我想避免为double和float编写重载函数。有人可以建议一个更清洁/更好的方法来实现这个吗?函数基本上是一个截断函数,它截断给定的输入&是的,原始文件被修改了。谢谢。 最佳答案 模板函数怎么样?templatevoidexample(T&var);编译

c++ - 为什么可以通过引用返回局部变量而不是临时变量的函数? C++

例如这个函数f定义如下:intf(intx){returnx;}如你所知,你不能为这个临时int分配一个引用:int&rf=f(2);//thiswillgiveanerror但是如果我像这样重新定义函数f:int&f(intx){returnx;}f(2);//sonowf(2)isareferenceofx,whichhasbeendestroyed所以我的问题是:编译器怎么能不让你创建一个临时引用,该引用将在声明后被销毁(第一种情况)。另一方面,它允许您创建对x的引用f(2),而编译器知道该引用将在return后被销毁。 最佳答案

c++ - 未定义的 md5 引用

这个问题在这里已经有了答案:HowcanIuseopenssl/md5inC++tohashastring?(2个答案)关闭8年前。#includevoidmMD5(unsignedchar*packet,intsize){unsignedchar*res;MD5((unsignedchar*)&packet,size,(unsignedchar*)&res);for(inti=0;i我收到错误:对MD5的undefinedreference谁能帮帮我?

c++ - 如果类具有引用数据成员,为什么编译器不合成默认赋值运算符

在C++中,如果类具有引用数据成员,则默认赋值运算符不会由编译器合成。为什么? 最佳答案 InC++,ifaclasshasareferencedatamemberthedefaultassignmentoperatorisnotsynthesizedbycompiler.Why?复制分配应该做什么定义在:C++03标准12.8/13:Eachsubobjectisassignedinthemannerappropriatetoitstype:ifthesubobjectisofclasstype,thecopyassignment

c++ - 未定义对 'function' 的引用——链接器问题?

我目前正在尝试在Linux终端上编译和链接我的C++文件。我运行的命令是:g++-ogameplaygamePlay.cppplayer.cppmain.cppdisplay.cpp-lcurses该命令似乎可以完美地编译所有内容,但是一旦它尝试链接内容,我就会遇到2个错误。undefinedreferenceto'gamePlay::deal(std::vector>,std::vector>)'undefinedreferenceto'gamePlay::score(player)'下面是我的gamePlay.CPP文件。我真的迷路了,非常感谢任何帮助!#include"gameP

c++ - 为什么我可以 std::move 流右值引用到左值引用?

据我了解C++11引用,我不应该能够将右值引用绑定(bind)到(非常量)左值引用,因为前者可能绑定(bind)到临时对象,而后者绝不能绑定(bind)到一个临时的。但是我发现这种奇怪的行为与临时流对象有关(我尽可能地减少了)structDummy{};templateStream&operatorvoidpass(Stream&&s){std::move(s)lvalueconversion?}#includeintmain(){pass(std::fstream("test",std::ios::out));}如果我写s在线(X),C++在(A)行提示,说error:invalid

c++ - 如何在 c++1y 的返回类型推导中保留 cv 限定符或引用?

首先,我构建了四个结构,每个结构都返回值、左值引用、const左值引用、右值引用。我在包装器(B或C)中使用它们,在这些包装器的方法func()中,我想保留A的func()的引用和cv限定符。在C++11中,我使用了尾随返回类型。但随着c++14中正常返回类型推导的到来,我猜我可以跳过尾部,但只有auto,返回类型像普通一样忽略限定符和引用自动。然后,我的问题是在c++14中实现它的最佳方法是什么,它的行为就像下面的类B一样?当它很琐碎时,写尾部(通常是decltype(returnexpression))有时会令人沮丧。structA1{intfunc(){returnx;}intx

c++ - 指向指针的引用变量

intmain(){intx=10;int*p=&x;int&y=*p;cout以上是最能解释我的问题的代码。通常,变量引用(&)获取变量的地址并开始引用该变量。我试过通过指针做同样的事情。我定义了一个变量,指针p指向x,引用变量y指向*p。这是否意味着y现在指的是同一个变量x?下一步,我不再通过*p指向x,现在引用变量y会发生什么?它会持有什么。在上面的代码中,cout谁能帮忙解释一下这里的行为。 最佳答案 [注意:这个答案只是关于C++的。在C中,您的代码不应编译。]是的,在你初始化y之后,它指的是x。递增p不会改变这一点——y

c++ - "Type"不引用 C++ 上的值

我在OpenFrameworks图稿中遇到此错误。但似乎是一个简单的C++问题。ofVec2fdoesnotrefertoavalue当然,我在使用指针时遇到了问题,但我不明白为什么。我试图改变&->*Canvas4.cppvoidCanvas4::createStuff(){ballCollection.clear();for(inti=0;i.5)dir=-1;myBall=newBall(org,loc,radius,dir,offSet);ballCollection.push_back(*myBall);}//这是Ball类的构造函数;Ball::Ball(ofVec2f&_