我对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类中的私有全局变量)
如果我制作指针,我应该删除它的对象/变量 指向?它留在记忆中吗?
我能阅读哪些有用的资源可以帮助我吗?
最后一点 如果有人可以帮助我,非常感谢你。这个问题让我疯狂了几个小时。
答案 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个元素,它是一个指针。接下来,我使用解除引用运算符->
,它允许您访问指针所指向的变量上的函数/变量。