所以,我有这个类包含另一个类的向量。每当我尝试将一个新对象推入此向量时,它每次都会在相同的内存位置创建该对象。
(希望)相关代码:
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.
}
}