【发布时间】:2016-09-21 19:18:27
【问题描述】:
我对 c++ 很陌生,所以我在指针方面有很多问题,尽管我理解这个概念。问题是我在 main 中创建了一个指针向量:
main/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 循环获取它,但是在尝试计算结果时,位置与 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 中的向量(或任何足够的集合),然后接收内存位置并使用内存位置指向的对象实体控制.cpp
额外问题: 我以为我需要一个指针来更改类中的实际变量值,但是,
void Fish::changePosition(int addX, int addY, int addZ)
{
xLocation = addX;
yLocation = addY;
zLocation = addZ;
//std::cout <<"VALUE ="<< getX();
}
似乎工作正常,你能解释一下吗? (x,y,z 位置是 Fish 类中的私有全局变量)
如果我创建一个指针,我是否应该删除它所在的对象/变量 指向?它会留在记忆中吗?
有什么好的资源可以阅读对我有帮助吗?
最后的笔记 如果有人可以帮助我,非常感谢。这个问题已经让我发疯了好几个小时。
【问题讨论】:
-
是的,可能应该删除那个 cout,因为它与问题无关。这只是为了测试目的
-
我正在测试它是否与我发送给方法的向量相同,现在应该从块代码中删除它,无论如何都会有多条鱼添加到向量中,这就是我不这样做的原因只送一条鱼到那里。感谢您的评论
-
关于额外问题:您编写的函数是
Fish类(Fish::)的一部分,因此允许修改Fish的任何数据成员,甚至是私有的。否则私有数据成员将毫无意义。您不需要指针来访问或修改数据成员。你从哪里得到那个的?数据成员名称自动引用调用成员函数的实例的数据成员。 -
我在某处读到这些方法得到了一个变量的副本,但我可能误解了它,谢谢 ^.^"