C++ 返回指向指针数组的指针获取下一个元素失败
我有一个函数,其中我用两个指针填充指针数组:C++ 返回指向指针数组的指针获取下一个元素失败,c++,arrays,pointers,return,element,C++,Arrays,Pointers,Return,Element,我有一个函数,其中我用两个指针填充指针数组: Vertex* MacePiece::getPositionOffset(int aDirection){ // returns Plate at Position aParent.myPlates[0] BasePlate** theGroundPlate = this->getPlates(); Vertex* theOffset[] = {0,0}; switch(aDirection){ theOffset[0] =
Vertex* MacePiece::getPositionOffset(int aDirection){
// returns Plate at Position aParent.myPlates[0]
BasePlate** theGroundPlate = this->getPlates();
Vertex* theOffset[] = {0,0};
switch(aDirection){
theOffset[0] = theGroundPlate[0]->getVertexAt(0); //A
theOffset[1] = theGroundPlate[0]->getVertexAt(1); //B
break;
}
return theOffset[0];
}
接下来,我将带第一个元素地址的指针传递给另一个函数:
Vertex* theParentOffset = aParentPiece->getPositionOffset(aDirection);
theConnectingPiece->setPositionInMace(theParentOffset, aDirection);
这里我使用的元素如下所示:
void MacePiece::setPositionInMace(Vertex* aOffset, int aDirection){
// set groundplate position
updateGroundPlatePositionByOffsetVertex(aOffset, aDirection);
}
void MacePiece::updateGroundPlatePositionByOffsetVertex(Vertex* aOffset, int aDirection) {
BasePlate** thePlates = this->getPlates();
// first update GroundPlate's Position
Vertex* A = thePlates[0]->getVertexAt(0);
Vertex* B = thePlates[0]->getVertexAt(1);
Vertex* C = thePlates[0]->getVertexAt(2);
Vertex* D = thePlates[0]->getVertexAt(3);
switch(aDirection){
case MOVE_NORTH:
// still 3D thus 2D's y is 3D'z if camera is looking down Y
// Two Sides are connecting thus Some Plate locations are identical
// A.x defined by parent D.x
A->position[0] = aOffset[1].position[0];
// A.z defined by parent D.z
A->position[2] = aOffset[1].position[2];
//B.x defined by parent C.x
B->position[0] = aOffset[0].position[0];
//B.z defined by parent C.z
B->position[2] = aOffset[0].position[2];
// now set Opposit side (A->D, B->C), since moving north:
// x is the same
// z is reduced by -1 because OpenGL's Z is reducing to far-pane
D->position[0] = A->position[0];
D->position[2] = A->position[2] - 1.0f;
C->position[0] = B->position[0];
C->position[2] = B->position[2] - 1.0f;
break;
具体而言,本部分:
// A.x defined by parent D.x
A->position[0] = aOffset[1].position[0];
// A.z defined by parent D.z
A->position[2] = aOffset[1].position[2];
//B.x defined by parent C.x
B->position[0] = aOffset[0].position[0];
//B.z defined by parent C.z
B->position[2] = aOffset[0].position[2];
aOffset[1]返回与aOffset[0]相同的值
当我为指向每个信息的数组传递**指针时,所有信息都会丢失
我正在创造一个迷宫,但它只在一个方向上失败。传递那个指针有什么问题?如何获得偏移量[1]中指向的正确元素
太可怕了
干杯,克努特问题出在第一个函数中。返回数组的第一个元素,即指针。我认为您的目的是返回两个元素的数组,以便索引0和1访问您在第一个函数中分配的指针。使用现有数据结构没有简单的修复方法。一种解决方案是让第一个函数返回std::pair。将两个指针分配到pair.first和pair.second中,这样以后就很容易访问这些值。您好,谢谢您的回答。我尝试将其作为顶点**返回,但后来我丢失了一些值。我不明白为什么它们会消失。它们没有被覆盖。这是相同的电话交互。但是用**代替。我将再次更改它,并查看发生了什么情况顶点**将不起作用,因为您将返回数组的地址,该数组是一个局部变量。我现在只使用第一个顶点,并计算由于该顶点而产生的其余顶点:D