草庐IT

c++ - 接收错误变量的类型不完整 "void"

我正在编写一个基本的C++程序来计算直线的长度和斜率。用户输入一组x和y坐标点,然后程序会显示一个菜单,询问用户他/她是想只计算斜率、只计算长度,还是同时计算斜率和长度。但是,我的voidMenu函数出现错误,指出该变量具有不完整的类型“void”。我现在的代码如下。#include#includevoidMenu(int&MenuNum);voidCalculateSlope(int&X1,int&X2,int&Y1,int&Y2);voidCalculateLength(int&X1,int&X2,int&Y1,int&Y2);usingnamespacestd;intmain(i

c++ - 如何在谷歌模拟测试中为模拟方法的 void * 参数设置一个值?

我想将字符串“设备名称”传递给方法的void*指针参数,稍后将其检索到字符数组。为此我做了如下所示。我在这里创建了一个Action来实现这一点。ACTION_P(SetArg2ToChar,value){*static_cast(arg2)=*value;}要调用/模拟的实际方法boolgetDictItem(WORDwIndex,BYTEbSubIndex,void*pObjData,DWORDdwLength,CSdo&sdo)我的模拟方法MOCK_METHOD5(getDictItem,bool(WORDwIndex,BYTEbSubIndex,void*pObjData,DWO

c++ - 为什么 assert 定义为 (void)0?

为什么#defineassert(expression)((void)0),而不是#define断言(表达式)在release模式下使用?(严格来说,定义NDEBUG时)听说是有原因的,忘记了。 最佳答案 ((void)0)定义assert(expression)什么都不做。使用它的主要原因是#defineassert(expression)将允许assert(expression)在没有分号的情况下编译,但如果宏定义为((void)0) 关于c++-为什么assert定义为(void)

c++ - 修改后的 std::invoke/std::apply,将可调用对象作为 void* - 可能吗?

在C++17中我们有std::invoke:templatestd::result_of_tinvoke(F&&f,ArgTypes&&...args);(并且在C++11中已经有std::experimental::apply,它是相似的,但有一个元组)。现在,我要实现:templateTinvoke(void*f,ArgTypes&&...args);与std::invoke的不同之处在于f是通过void指针传递的,并且其类型没有模板参数。然而,类型可以被人类读者推断出来,前提是f是一个指向普通独立函数的指针,我可以这样做:templateTmy_invoke(void*f,Arg

c++ - 为什么将 void 与函数一起使用?

我知道void不返回任何值。那么它是如何结合函数起作用的呢?我的理解是,函数的目的是在对它执行某些操作后返回一条信息。那么为什么我不想返回任何值,这将如何受益? 最佳答案 Myunderstandingisthatthepurposeofafunctionistoreturnapieceofinformationafterdoingsomethingwithit.在某些(大多数)编程语言中,函数也有副作用。一些函数的目的仅限于副作用,不需要返回值。此类函数具有void返回类型。一些副作用的例子可能是:更新全局用户不想知道操作状态的文

c++ - 在 void 指针中存储整数的往返安全性

在thisarticle关于整数和指针的reinterpret_cast提到了以下内容:(theround-tripconversionintheoppositedirectionisnotguaranteed;thesamepointermayhavemultipleintegerrepresentations)我的理解是否正确,标准不保证以下内容:intptr_tx=5;void*y=reinterpret_cast(x);assert(x==reinterpret_cast(y));有人可以确认吗? 最佳答案 您的解释是正确的

c++ - 将返回 void 但具有整数参数的函数作为 ARGUMENT 本身传递给另一个函数

我最近开始使用c++开发OpenCV。我在使用以下代码时遇到问题。#include"cv.h"#include"highgui.h"intg_slider_position=0;CvCapture*g_capture=NULL;voidonTrackbarSlide(intpos){cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);}intmain(intargc,char**argv){cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);g_capture=cvCreateFil

c++ - reinterpret_cast<int*>(char*) 与 static_cast<int*>(static_cast<void*>(char*)) - 使用哪个?

当你动态分配了一个char*类型的缓冲区并想将它转换为特定类型时,你是否应该使用类似的东西reinterpret_cast(char*)或者类似的东西static_cast(static_cast(char*))为什么?我个人很想使用后者,因为对我来说,它并不是真正的数据“重新解释”(而只是一种分配缓冲区的机械方式)而且它看起来不像是一个来源错误的方式可能与典型的reinterpret_cast相同,但这是正确的直觉吗? 最佳答案 AccordingtoDaveAbrahams,使用链式static_casts是强制指针类型的正确、

c++ - boost::shared_ptr 到 void * 反之亦然

我正在用C语言开发一个应用程序,我需要在其中使用第3方C++库。所以,我基本上是在C++库周围编写一个包装器,以便可以从我的纯C应用程序中调用它。库中的一些方法返回类型为boost::shared_ptr的指针,我需要将其转换为void*[forC]然后将其转换回boost::shared_ptr类型以重用它以进行进一步处理。我使用以下方式进行转换:作废*:void*func1(){//aftertheboost::shared_ptriscreatedreturnstatic_cast(SHARED_PTR.get())}来自void*:voidfunc2(void*VOID_PTR

c++ - 全局分配函数和 const void*

根据C++11,下面的代码是否构成“未定义行为”(由于使用了const_cast,请参见下面的引用)?constvoid*p=operatornew(123);operatordelete(const_cast(p));来自C++11标准(3.7.4.2.3)的相关引述:Thevalueofthefirstargumentsuppliedtoadeallocationfunctionmaybeanullpointervalue;ifso,andifthedeallocationfunctionisonesuppliedinthestandardlibrary,thecallhasnoeff