指向对象的指针集合,澄清

时间:2016-09-21 19:18:28

标签: c++ pointers vector

我对c ++很陌生,所以我的指针有很多问题,虽然我理解这个概念。问题是我正在制作一个指针向量:

主要/ Aquarium.cpp

using namespace std;
#include "EntityControl.h"
#include <Windows.h>

int main() {

    EntityControl entity;
    vector<Fish*> fishVector;
    Fish q;
    cout << "fish q = " << &q << endl;
    fishVector.push_back(&q);

        entity.movementController(&fishVector);
        cout << &fishVector << endl;
        system("pause");
     return 0;
}

正如您所看到的,我将可以找到鱼的位置添加到fishVector,然后我想在EntityControl类中对该对象执行某些操作。但是我不知道如何做到这一点,我尝试用for循环来获取它但是当试图cout结果时,位置与main.cpp中的鱼不同。

EntityControl.cpp

#include "EntityControl.h"


void EntityControl::movementController(std::vector<Fish*> * fishInputVector)
{
        unsigned int x = rand() % xContainer;
        unsigned int y = rand() % yContainer;
        unsigned int z = rand() % zContainer;
        //i.changePosition(x, y, z);
}

EntityControl::~EntityControl()
{
}

在stackoverflow上有一些这样的帖子,但我没有理解答案。我以为我需要一些额外的帮助。所以,如果你能够尽可能轻松地解释它,那么我将非常感激。

问题澄清:将Fish对象的内存位置添加到main中的向量(或任何满足的集合),然后接收内存位置并使用内存位置指向的对象EntityControl.cpp

额外问题: 我以为我需要一个指针来改变类中的实际变量值,但是,

void Fish::changePosition(int addX, int addY, int addZ)
{
    xLocation = addX;
    yLocation = addY;
    zLocation = addZ;

    //std::cout <<"VALUE ="<< getX();
}

似乎工作正常,你能解释一下吗? (x,y,z位置是Fish类中的私有全局变量)

  • 如果我制作指针,我应该删除它的对象/变量 指向?它留在记忆中吗?

  • 我能阅读哪些有用的资源可以帮助我吗?

最后一点 如果有人可以帮助我,非常感谢你。这个问题让我疯狂了几个小时。

2 个答案:

答案 0 :(得分:0)

由于movementController的参数是指针,因此需要通过它间接访问向量。由于向量的元素是指针,因此需要间接通过它们。因此movementController中的代码可能类似于:

void EntityControl::movementController(std::vector<Fish*> * fishInputVector)
{
    for (auto fish_ptr : *fishInputVector) {
        unsigned int x = rand() % xContainer;
        unsigned int y = rand() % yContainer;
        unsigned int z = rand() % zContainer;
        fish_ptr->changePosition(x, y, z);
    }
}

答案 1 :(得分:0)

我并不是100%确定我理解你的问题,但你似乎误解了指针。

我相信你正试图做一些名为&#34; dereferencing&#34;。这是一个允许您在指针引用的对象上调用方法的操作。您的方法应如下所示:

void EntityControl::movementController(std::vector<Fish*> * fishInputVector)
{
    for(int i = 0; i < fishInputVector->size(); i++)
    {
        unsigned int x = rand() % xContainer;
        unsigned int y = rand() % yContainer;
        unsigned int z = rand() % zContainer;
        fishInputVector->at(i)->changePosition(x,y,z);
    }
}

我在这里改变了两件事:我引用了fishInputVector的第i个元素,它是一个指针。接下来,我使用解除引用运算符->,它允许您访问指针所指向的变量上的函数/变量。