【发布时间】:2013-08-02 19:02:01
【问题描述】:
所以,我有一个包含另一个类的向量的类。每当我尝试将新对象推入此向量时,它每次都会在相同的内存位置创建该对象。
(希望)相关代码:
class FSM{
private:
std::vector<Node> nodeList;
int cap;
int obs;
int topNode;
public:
FSM(int nodeCap, int numObs){
cap = nodeCap;
obs = numObs;
topNode = -1;
}
bool addNode(){
if (isFull()) return false;
nodeList.push_back(Node(obs));
topNode++;
return true;
}
现在,如果我在我的主函数中创建一个独立的 Node 对象并计算 &node,我会得到不同的内存位置。但是在 FSM 类中创建的总是相同的。此外,如果我更改 FSM 类存储的节点之一中的任何内容,它会更改所有节点。我不知道发生了什么。
编辑:根据要求,这里是 Node 类。只是发布整个事情,不确定什么是相关的。
class Node{
private:
std::vector<int> connects;
int action;
public:
Node(int numObs){
for(int i = 0; i < numObs; i++){
connects.push_back(-1);
}
srand(time(NULL));
}
void setConnections(std::vector<int> newVec){
for (int i = 0; i < connects.size(); i++){
connects[i] = newVec[i];
}
}
int getConnection(int index){
return connects[index];
}
std::vector<int> getConnectionList(){
return connects;
}
void setAction(int act){
action = act;
}
int getAction(){
return action;
}
void setRandomConnections(int numNodes){
for (int i = 0; i < connects.size(); i++){
connects[i] = rand() % numNodes;
}
}
};
编辑第二个:这是我的主要工作。
int main(){
FSM myFSM(5, 3);
while (!myFSM.isFull()){
myFSM.addNode();
std::cout << &myFSM.getTopNode(); // getTopNode() returns the most recent
// node.
}
}
【问题讨论】:
-
我们能看到 Node 类吗?
-
那么您是否将多个节点推送到向量?或者你只是重新运行你的程序几次?
-
我们可以看到获取
Node以显示其地址的代码吗?我怀疑这段代码是问题所在。 -
如果 getTopNode 做我认为的那样,你正在打印一个临时对象的地址(也就是顶部节点的 copy,而不是顶部节点本身)。所以那个代码是没有意义的。
-
显示可以复制、粘贴、编译和运行的代码。重建所有缺失的小片段不是任何人的想法。
标签: c++