前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决使用ptlib库编译"realloc"参数不足问题

解决使用ptlib库编译"realloc"参数不足问题

作者头像
Qt君
发布2019-07-15 16:20:09
1.1K0
发布2019-07-15 16:20:09
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

解决使用ptlib库导致的编译错误qlist.h(98): warning C4003: 类函数宏的调用“realloc”参数不足的问题。

编译错误

代码语言:javascript
复制
D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qlist.h(98): warning C4003: 类函数宏的调用“realloc”参数不足D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qlist.h(98): error C2059: 语法错误:“,”D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qlist.h(98): error C3254: “QListData”: 类包含显式重写“Reallocate”,但并不从包含函数声明的接口派生D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qlist.h(98): error C2838: “Reallocate”: 成员声明中的限定名称非法D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qlist.h(577): warning C4003: 类函数宏的调用“realloc”参数不足D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qvarlengtharray.h(244): error C2059: 语法错误:“字符串”D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qvarlengtharray.h(260): note: 参见对正在编译的 类 模板 实例化 "QVarLengthArray<T,Prealloc>" 的引用D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qvarlengtharray.h(244): error C3254: “QVarLengthArray<T,Prealloc>”: 类包含显式重写“Reallocate”,但并不从包含函数声明的接口派生D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qvarlengtharray.h(244): error C2838: “Reallocate”: 成员声明中的限定名称非法D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qvarlengtharray.h(362): warning C4346: “QVarLengthArray<T,Prealloc>::PMemoryHeap::Reallocate”: 依赖名称不是类型D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qvarlengtharray.h(362): note: 用“typename”为前缀来表示类型D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qvarlengtharray.h(362): error C2988: 不可识别的模板声明/定义D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qvarlengtharray.h(362): error C2059: 语法错误:“字符串”D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qvarlengtharray.h(363): error C2063: “Reallocate”: 不是一个函数D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qvarlengtharray.h(363): error C2226: 语法错误: 意外的“QVarLengthArray<T,Prealloc>::PMemoryHeap::Reallocate”类型

问题分析

  • 由于使用了ptlib库编译,编译错误又提示类函数宏的调用“realloc”参数不足的问题,就查找了一下ptlib关于realloc的接口;
  • 找到ptlib下的 object.h头文件包含以下宏定义;
代码语言:javascript
复制
/** Override of system call for memory check system.This macro is used to allocate memory via the memory check system selectedwith the <code>PMEMORY_CHECK</code> compile time option. It will include the source fileand line into the memory allocation to allow the PMemoryHeap class to keeptrack of the memory block.*/#define realloc(p,s) PMemoryHeap::Reallocate(p, s, __FILE__, __LINE__)

解决问题

  • 在引用ptlib的头文件下使用使用 undef宏定义解开 realloc即可解决。
代码语言:javascript
复制
#undef realloc(p,s)

关于编译器C2838与C3254的错误代码

  • C3254为"explicit override"类包含显式重写"override",但并不从包含函数声明的接口派生;
  • C2838为类、结构或联合使用完全限定名重新声明另一个类、结构或联合的成员。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编译错误
  • 问题分析
  • 解决问题
  • 关于编译器C2838与C3254的错误代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档