找回密码
 立即注册
收起左侧

访问成员变量出错

4
回复
6497
查看
[复制链接]
累计签到:6 天
连续签到:1 天
来源: 2014-12-20 22:50:25 显示全部楼层 |阅读模式
1Qter豆
编译能通过,运行时程序出错自动退出,用debug检查提示
“底层由于接受到操作系统的信号而停止
信号名称:SIGSEGV
信号意义:Segmentation fault”

断点在成员变量的访问上,整了一天,没弄明白,快崩溃了。
程序大概是这样:
  1. class CMeta : public QGraphicsPathItem
  2. {
  3. public:
  4.     void test1();
  5. private:
  6.     QPointF mTest;
  7. }
  8. void CMeta::test1()
  9. {
  10.     QString str;
  11.     str.sprintf("%f",mTest.x());
  12.     QMessageBox::about(NULL, "About", str);
  13. }
复制代码
在程序中调用test1(),出错
  1. CMeta *mMeta = qgraphicsitem_cast<CMeta *>(startMetas.first());
  2.     //QList<CHtPts*> *mHtPts = mMeta->GetHtPts();
  3.     mMeta->test1();
复制代码

最佳答案

查看完整内容

那个错误提示是个常见问题,不能确定到底是什么问题造成的。如果调试是test1()的问题,那么建议先将test1()函数的实现清空,看看有没有问题,如果还是有问题,就不是这个函数本身的问题了。如果没有问题,就一行一行添加代码,确定到底是什么原因。
回复

使用道具 举报

累计签到:1569 天
连续签到:1 天
2014-12-20 22:50:26 显示全部楼层
那个错误提示是个常见问题,不能确定到底是什么问题造成的。如果调试是test1()的问题,那么建议先将test1()函数的实现清空,看看有没有问题,如果还是有问题,就不是这个函数本身的问题了。如果没有问题,就一行一行添加代码,确定到底是什么原因。
参与人数 1人气 +1 收起 理由
hooky + 1 很实用!

查看全部评分总评分 : 人气 +1

回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2014-12-21 08:52:12 显示全部楼层
yafeilinux 发表于 2014-12-20 23:45
那个错误提示是个常见问题,不能确定到底是什么问题造成的。如果调试是test1()的问题,那么建议先将test1() ...

我测试出来,只要访问成员变量mTest程序运行就会出错。
编译没有问题,运行程序就会出错
回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2014-12-21 09:36:42 显示全部楼层
找到问题原因了,派生类CMeta 没有重载返回type的方法。
在CMeta类中忘了加入下面的代码了
  1. enum { Type = UserType + 1 };
  2. int type() const
  3.         { return Type;}
复制代码
回复

使用道具 举报

累计签到:1569 天
连续签到:1 天
2014-12-21 18:05:52 显示全部楼层
hooky 发表于 2014-12-21 09:36
找到问题原因了,派生类CMeta 没有重载返回type的方法。
在CMeta类中忘了加入下面的代码了 ...

嗯。解决了就好,很多时候感觉问题在那里,其实不然。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了