访问指向C+中指针的指针+; 我在iPhone应用程序中使用了第三方库,使用C++,我需要使用的方法之一返回指向类指针的指针。像下面这样 DLL classAttributes** getAttributes();

访问指向C+中指针的指针+; 我在iPhone应用程序中使用了第三方库,使用C++,我需要使用的方法之一返回指向类指针的指针。像下面这样 DLL classAttributes** getAttributes();,c++,pointers,function-pointers,C++,Pointers,Function Pointers,我可以成功地调用该方法,并将值返回到一个指向类似这样的指针的指针中 classAttributes **attributes = cPPClass->getAttributes(); 但是,我似乎无法访问该类上的任何方法,例如,我知道该类有一个名为getName()的函数;但当我尝试调用它时,我会出错 attributes->getName(); 'Request for member 'getName' in *attributes'; which is of non-class

我可以成功地调用该方法,并将值返回到一个指向类似这样的指针的指针中

classAttributes **attributes = cPPClass->getAttributes();
但是,我似乎无法访问该类上的任何方法,例如,我知道该类有一个名为getName()的函数;但当我尝试调用它时,我会出错

attributes->getName(); 'Request for member 'getName' in *attributes'; which is of non-class type 'attributes*''
我在谷歌上搜索了一下,发现了一些东西,上面说要访问指针地址,可以使用这种格式

&(*attributes)->getName(); 'invalid uses of incomplete type 'struct attributes'
任何帮助都将不胜感激。
谢谢。

如果不了解更多关于图书馆的信息,很难说。但它可能返回一系列项目:

attributes[0]->getName();    
attributes[1]->getName();

不过,我的猜测有一点值得怀疑,那就是没有明显的方法知道有多少项目。

如果不了解更多关于图书馆的信息,很难说。但它可能返回一系列项目:

attributes[0]->getName();    
attributes[1]->getName();

我猜测的问题部分是,没有明显的方法知道有多少个项目。

首先考虑一下如果函数返回了一个Cype属性变量的指针,你会做什么。在这种情况下,您只需执行以下操作:

attributes->getName();
由于它是指向指针的指针,因此必须首先取消对它的引用,然后使用
->
运算符:

(*attributes)->getName();

如果这不起作用,则可能是由于未实现函数或继承引起的问题
attributes->getName();
由于它是指向指针的指针,因此必须首先取消对它的引用,然后使用
->
运算符:

(*attributes)->getName();

如果这不起作用,则可能是由于未实现函数或继承引起的问题

您可能需要的是classAttributes*。因为您有一个classAttributes**,所以您希望取消对它的引用一次,以获得classAttributes*

(*attributes)
从那里你可能可以给班上的成员打电话

classAttributes **attributesArray = cPPClass->getAttributes();
classAttributes *attributesObject(*attributesArray);
attributesObject->getName();

您可能需要的是classAttributes*。因为您有一个classAttributes**,所以您希望取消对它的引用一次,以获得classAttributes*

(*attributes)
从那里你可能可以给班上的成员打电话

classAttributes **attributesArray = cPPClass->getAttributes();
classAttributes *attributesObject(*attributesArray);
attributesObject->getName();

从外观上看,您可能必须这样做(即,无符号):


这是因为取消对它的引用一次将给您一个指向结构的指针,然后您可以在该结构上使用
->
操作符。当您执行
&(*attributes)
时,发生的情况是,您正在取消对指针的引用,然后获取您拥有的对象的地址-实际上使其成为不可操作的对象。

从外观上看,您可能必须这样做(即,无符号):


这是因为取消对它的引用一次将给您一个指向结构的指针,然后您可以在该结构上使用
->
操作符。当您执行
&(*attributes)
时发生的情况是,您正在取消对指针的引用,然后获取您拥有的对象的地址-实际上使其成为不可操作的对象。

对不完整类型“struct attributes”的无效使用
表示您需要
包含它的头文件。它只在代码中的这一点上被向前声明。

不完整类型“struct attributes”的无效使用
表示您需要包含它的头文件。它只是在代码中的这一点上声明的。

注意
attributes[0]->getName()
相当于
(*attributes)->getName()
@Kristopher:是的-我知道。我会尽力澄清我的意思。我添加了另一个条目来显示更多类似于数组的用法(还有一个警告,表明我不知道有多少项)。谢谢。请注意,
attributes[0]->getName()
相当于
(*attributes)->getName()
@Kristopher:是的,我知道。我会尽力澄清我的意思。我添加了另一个条目来显示更多类似于数组的用法(还有一个警告,表明我不知道有多少项)。谢谢。你知道
->
*
&
操作员做什么吗?如果没有,你需要找到并了解它们是什么。通过尝试操作符的随机组合,你不能在C++程序中遇到困难。你知道什么是<代码> -> <代码>,>代码> *>代码>和<代码>和<代码>操作符吗?如果没有,你需要找到并了解它们是什么。你可以不尝试通过尝试C++的随机组合来操作操作符。嗨,我试过这两个建议(*)和[0 ],但是我仍然得到同样的错误:不完整的Hype Hype家伙的无效使用,我尝试了那些建议(*)和[0 ],但是我仍然得到同样的错误::无效的不完整类型的使用