我有一些由其他人编写的代码,其中一些函数采用其数据类型后跟*&的参数。我习惯于采取一种或另一种方式,例如:采取“双*”或“双&”但不是两个。它会认为他们会取消。
这是一个例子,这些都来自他们认为有用的代码:
在头文件中有一个声明为:
的函数void someClass::foo(const unsigned int*& ubuff);
然后在我的主文件中,有一个指向某些UINT声明并初始化为:
的指针unsigned int* pbuff = new UINT[n];
然后,函数someClass :: foo被称为:
foo(pbuff);
当我编译时,我得到错误“无法将参数1从'unsigned int *'转换为'const unsigned int *&'”。如果我将我的函数调用更改为以下内容,则编译正常:
foo((const unsigned int *&)(pbuff));
所以,我的问题是:
*&amp ;?的目的是什么?即,与*或&有什么不同?他们自己为什么不取消自己呢?那个函数foo期望什么呢?一个地址?一个值?地址的地址?这令人困惑。
是否只是将“unsigned int *”转换为“const unsigned int *&”好的还是我需要做别的事?
只是另一个快速示例,这完全来自其他人分发的cpp文件,所以我假设这是为他们编译的。他们有一个函数调用
klabels = new int[sz];
EnforceLabelConnectivity(klabels, m_width, m_height, nlabels, numlabels, double(sz)/double(STEP*STEP));
当我尝试构建时,我收到错误“'SLIC :: EnforceLabelConnectivity':无法将参数1从'int *'转换为'const int *&'”。
一如既往地谢谢。
答案 0 :(得分:3)
对于类型T,T *&
表示“对指向T的指针的引用”。调用函数应该传递指向T的指针。对于const修饰符,尝试foo((const unsigned int *)pBuff);
或者声明pBuff是一个指向const int的指针。
答案 1 :(得分:1)
好吧,我尝试转换为(const unsigned int *),但这不起作用(不会构建)。最后,我必须在原始帖子的foo函数示例中完全转换为(const unsigned int *&)。希望这可以帮助。谢谢。
顺便说一下,我之所以没有从我的主代码中开始制作pbuff const的原因是它稍后传递给另一个函数,它会修改它,所以我认为它不会起作用声明时使它成为const。
答案 2 :(得分:0)