访问公共成员变量时的垃圾值

时间:2014-02-10 14:52:54

标签: c++

请耐心等待我,我是C ++的新手,This is the code(下面是pastebin备份)我是为解决八个难题而编写的。

我在main.cpp

中实例化了一个对象
State initial(intial,0);
initial.setHeuristic(goal);
initial.setfN(initial);

现在当我打印这个时,我得到了我预期的结果,然而,当我将它传递给nextState(State astate)函数并尝试将其打印完全不同时。

int cost = astate.cost; //In class State, This isn't the same one as it appeared previously! 

当我在ideone中执行它时,结果是:

012
345
678
cost= 0heuristic= 4total= 4
printing astate                   //Its the previous state 
012
345
678
cost= -1217288744heuristic= 134552700total= 134544434  //Its now completely transformed!

正如您所看到的,数字现在完全不同了! 我无法弄清楚为什么并完全被淹没,请帮忙。

pastebin backup

3 个答案:

答案 0 :(得分:1)

你在这里隐式调用State(vector<vector<int>> sState)

initial.nextState(intial); // intial != initial.

这相当于:

initial.nextState(State(intial)); // implicit constructor.

State(vector<vector<int>> sState)并未初始化费用。

答案 1 :(得分:0)

问题是您的对象是按值传递的,这意味着只要您将State对象传递给printStatenextState这样的函数,就会创建一个新对象。您需要更改这些功能以进行参考。

此外,printStatenextState看起来应该是State类的静态方法或独立函数。他们不使用对象状态,所以这样做有什么意义:

initial.printState(initial);
tempHolder = initial.nextState(intial);

如果可以(如果你让它们独立):

printState(initial);
tempHolder = nextState(intial);

或(如果你让它们静止)

State::printState(initial);
tempHolder = State::nextState(intial);

答案 2 :(得分:0)

你的代码看起来更像java然后是c ++,因为你按值传递对象;从语法的角度来看,它与在Java中通过引用传递它们相同。

这意味着在调用函数时会创建对象的本地副本,并在退出函数时将其销毁。所以你不能在函数调用之间保存值,期望函数根据不同函数的执行做某事只是因为它们被传递给同一个对象。

使用引用应该有帮助;