C++:记录一个错误 undefined reference to `vtable for

[复制链接]
 楼主| keer_zu 发表于 2023-2-28 10:25 | 显示全部楼层 |阅读模式
本帖最后由 keer_zu 于 2023-2-28 10:26 编辑
  1. class AppStateListener
  2.         :public ldra_class_1000030000 /* 75 */
  3. {
  4.   public :
  5.   virtual ~AppStateListener () = default ;
  6.     /**
  7.      * [url=home.php?mod=space&uid=247401]@brief[/url] request the app starts to serve, such as start threads, apply for some resource
  8.      * @param none
  9.      * @param none
  10.      *
  11.      * [url=home.php?mod=space&uid=266161]@return[/url] 0 indicates success
  12.      */
  13.   virtual uint8_t onStart () = 0 ;
  14.     /**
  15.      * @brief request the app stops to serve, such as stop threads, release resource
  16.      * @param none
  17.      * @param none
  18.      *
  19.      * @return 0 indicates success
  20.      */
  21.   virtual uint8_t onStop () = 0 ;
  22.     /**
  23.      * @brief notify of SM changed state
  24.      * @param fg function group
  25.      * @param state current changed state of the fg
  26.      *
  27.      * @return 0 indicates success
  28.      */

  29.   virtual uint8_t
  30.                   onStateChanged ( FG_TYPE fg , FG_STATE state )
  31. #if defined(LDRA_dummy_global) || defined(LDRA_dummy_1_1)
  32.   {
  33.    int ievent_handler_1zzqqzz                                                                              
  34. = event_handler_1zzqqzz                                                                                (       1 ) ; /* 37 */
  35.     event_handler_1zzqqzz                                                                                (       2  ) ; /* 48 */
  36.     return
  37.     0 ;
  38.   } ;
  39. #else
  40. ; /* end of prototype alternative */
  41. #endif /* endof dummy_ */
  42. }


出错:
  1. undefined reference to `vtable for AppStateListener'


 楼主| keer_zu 发表于 2023-2-28 10:27 | 显示全部楼层
之前的原始形式:
  1. class AppStateListener {
  2. public:
  3.     virtual ~AppStateListener() = default;

  4.     /**
  5.      * @brief request the app starts to serve, such as start threads, apply for some resource
  6.      * @param none
  7.      * @param none
  8.      *
  9.      * @return 0 indicates success
  10.      */
  11.     virtual uint8_t onStart() = 0;

  12.     /**
  13.      * @brief request the app stops to serve, such as stop threads, release resource
  14.      * @param none
  15.      * @param none
  16.      *
  17.      * @return 0 indicates success
  18.      */
  19.     virtual uint8_t onStop() = 0;

  20.     /**
  21.      * @brief notify of SM changed state
  22.      * @param fg function group
  23.      * @param state current changed state of the fg
  24.      *
  25.      * @return 0 indicates success
  26.      */
  27.     virtual uint8_t onStateChanged(FG_TYPE fg, FG_STATE state){return 0;};
  28. };


不会报错
 楼主| keer_zu 发表于 2023-2-28 10:44 | 显示全部楼层
对比发现导致的原因是:

没有宏定义的时候,下面代码就是没有函数体的:
  1. virtual uint8_t

  2.                   onStateChanged ( FG_TYPE fg , FG_STATE state )

  3. #if defined(LDRA_dummy_global) || defined(LDRA_dummy_1_1)

  4.   {

  5.    int ievent_handler_1zzqqzz                                                                              

  6. = event_handler_1zzqqzz                                                                                (       1 ) ; /* 37 */

  7.     event_handler_1zzqqzz                                                                                (       2  ) ; /* 48 */

  8.     return

  9.     0 ;

  10.   } ;

  11. #else

  12. ; /* end of prototype alternative */

  13. #endif /* endof dummy_ */
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12915

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12915

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部