这样做的正确方法是啥?调用指针到指针到指针中的函数?
Posted
技术标签:
【中文标题】这样做的正确方法是啥?调用指针到指针到指针中的函数?【英文标题】:What is the Proper Way to do this? Calling a Function that's Inside a Pointer-to-a-Pointer-to-a-Pointer?这样做的正确方法是什么?调用指针到指针到指针中的函数? 【发布时间】:2019-11-08 00:27:31 【问题描述】:我有一个 3D 指针。我将它指向一个指向“字符”对象的指针。作为其类的成员,该对象具有指向另一个对象类型的指针。我们称其为“死”对象类型。那个 die 对象类型有一个我想使用的函数。
我已经按照我认为应该的方式进行了设置,但我遇到了错误。我想我可能明白它在告诉我什么,但不确定是否有一个简单的解决方法。如果是这样,我很乐意这样做。非常感谢一些帮助。
我尝试将其设为 3D 指针,但没有得到不同的结果。
int main()
srand (time(0));
int setter = 1;
character ***charPtr = new barbarian**(setter);
charPtr->ptrAttackDieOne->roll();
cout << "The roll is" << charPtr->ptrAttackDieOne->getRoll() << endl;
return 0;
main.cpp:25:14: 错误:在‘* >charPtr’中请求成员‘ptrAttackDieOne’,它是非类类型‘character**’ charPtr->ptrAttackDieOne->roll(); ^
main.cpp:27:39: error: request for member ‘ptrAttackDieOne’ in ‘* >charPtr’, 这是非类类型‘character**’ cout ptrAttackDieOne->getRoll() endl;
【问题讨论】:
【参考方案1】:要取消对三指针的引用,您需要先对其进行两次引用:
(**charPtr)->ptrAttackDieOne->roll();
我还想指出,这不会'编译:
character ***charPtr = new barbarian**(setter);
它尝试创建一个barbarian**
类型的变量并为其分配一个整数setter
,这是不允许的。如果您想创建一个 3D 指针,每个级别都必须指向真实的已分配内存。 new
无法填写多级间接:
Barbarian*** barbarianFamiliesGroupedBySurname = new Barbarian**[3];
for (int i=0; i<3; i++)
barbarianFamiliesGroupedBySurname[i] = new Barbarian*[2];
for (int j=0; j<2; j++)
barbarianFamiliesGroupedBySurname[i][j] = new Barbarian("bob", weapon::axe);
【讨论】:
听起来不错。我误解了我在做什么。谢谢!以上是关于这样做的正确方法是啥?调用指针到指针到指针中的函数?的主要内容,如果未能解决你的问题,请参考以下文章