我有这样的情况,在我的程序中的某个时刻,我用new创建一个指针。然后我尝试使用分配的指针类的一些方法,并且代码被忽略。没有崩溃,但是当我进行测试之后,就像没有发生任何事情一样:
以下是代码,setAge
函数被忽略:
g2o::EdgeLinkXY_malcolm* linkObservation = new g2o::EdgeLinkXY_malcolm;
bool outout = false;
std::cout << "Bool" << outout << std::endl;
outout = linkObservation->interface.setAge(_age_start_value);
std::cout << "Bool" << outout << std::endl;
assert(outout == 1);
std::cout << "Age set" << std::endl;
assert(linkObservation->interface.manuallySetAge() == true);
EdgeLinkXY_malcolm拥有一个名为interface
的属性,如下所示:
class G2O_TYPES_SLAM2D_API EdgeInterfaceMalcolm
{
protected:
bool _flag_set_age;
public:
g2o::SE2 _malcolm_original_value;
double _malcolm_age;
// EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
EdgeInterfaceMalcolm() : _flag_set_age(false), _malcolm_age(1){};
virtual g2o::SE2 getOriginalValue(){return _malcolm_original_value;}
virtual void setOriginalValue(const g2o::SE2& orig_val){_malcolm_original_value = orig_val;}
virtual bool manuallySetAge(){return _flag_set_age;}
virtual double getAge(){return _malcolm_age;}
virtual bool setAge(double a){
std::cout << "Setting the age" << std::endl;
_flag_set_age = true;
assert(_flag_set_age == true);
_malcolm_age = a;
return _flag_set_age;
}
};
这是edge_link:
class G2O_TYPES_SLAM2D_API EdgeLinkXY_malcolm : public EdgeSE2PointXY
{
public:
EdgeInterfaceMalcolm interface;
// EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
EdgeLinkXY_malcolm();
}
它是构造函数:
EdgeLinkXY_malcolm::EdgeLinkXY_malcolm() :
EdgeSE2PointXY()
{
}
我有一个测试文件,我尝试上面写的函数,它工作正常,所有测试都通过。只是在运行真实程序的某个时候,setAge()
被忽略了。功能内部的打印件甚至没有打印在终端上。变量outout
似乎也被断言忽略,因为即使outout可以等于另一个值,assert(outout == 1)
也不会停止。这是我的代码停止的部分:
Bool0
Bool45
Age set
acg_node_rviz_full: /home/malcolm/ros_catkin_ws/indigo_ws/src/auto_complete_graph/src/ACG.cpp:258: g2o::EdgeLinkXY_malcolm* AASS::acg::AutoCompleteGraph::addLinkBetweenMaps(const Vector2D&, g2o::VertexSE2Prior*, g2o::VertexPointXY*): Assertion `linkObservation->interface.manuallySetAge() == true' failed.
我不知道为什么这不起作用我对我做错了什么感到很困惑,这样c ++代码可以像这样被忽略而不会崩溃?