c++ - Boost Xpressive - 字段“m_rx”的类型不完整
问题描述
我在编译包含类型成员字段的类头时遇到问题sregex
。
该类定义为:
#include <boost/xpressive/xpressive_fwd.hpp>
namespace Bob
{
class RegexReplace
{
public :
boost::xpressive::sregex m_rx;
std::string m_str;
RegexReplace(const char* strSearch, const char* strReplace);
};
} // namespace Bob
类 cpp 文件编译没有任何问题,但是当我将标头包含到使用该类的 cpp 文件中时,编译器给出以下错误:
error: field ‘m_rx’ has incomplete type ‘boost::xpressive::sregex’ {aka ‘boost::xpressive::basic_regex<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > >’}
boost::xpressive::sregex m_rx;
我在这里做错了什么???
解决方案
boost::xpressive::sregex m_rx;
是一个实例化,您只能通过 include 向前声明它..._fwd.hpp
,换句话说,它是不完整的。
#include <boost/xpressive/xpressive.hpp>
应该解决问题。
如果您真的想转发声明您的类型,则必须将其更改为指针(非工作代码,看起来 boost 使用静态 ::compile(...)):
惠普:
#include <boost/xpressive/xpressive_fwd.hpp>
namespace Bob
{
class RegexReplace
{
public :
boost::xpressive::sregex* m_rx;
std::string m_str;
RegexReplace(const char* strSearch, const char* strReplace);
~RegexReplace();
// @todo Implement move and copy semantics
};
} // namespace Bob
cp:
#include <boost/xpressive/xpressive.hpp>
namespace Bob
{
RegexReplace::RegexReplace(const char* strSearch, const char* strReplace) :
m_rx{new boost::xpressive::sregex}
{
......
}
RegexReplace::~RegexReplace() {
delete m_rx;
}
}
推荐阅读
- c++ - 错误:“没有匹配的函数调用 Date::Date()”
- javascript - 如何在 Chart.js 中对工具提示值进行排序
- c - strtok 关于标记化的奇怪行为
- c# - 生成互操作文件时将 unsigned char* 转换为字节
- java - 由于开发人员无法再跟踪故障,因此断开的堆栈跟踪是否是错误?(见示例)
- c# - EF Core 2.2:将时区转换添加到 select、groupby 和/或 where 上的 datetime2 列(修改/丰富查询上的属性映射)
- spring-mvc - 应用程序仍在查询数据库时出现 Tomcat 500 内部服务器错误
- python - 自定义样式的默认 matplotlib 刺颜色
- python - Sklearn PLSRegression 预测因 X 矩阵中的二进制指示符列而失败
- javascript - 用 Javascript 拍照后照片质量下降