我无法编译包含类型为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;
我在这里做错了什么?
答案 0 :(得分:0)
boost::xpressive::sregex m_rx;
是一个实例,您只能通过包含..._fwd.hpp
来进行声明,也就是说,它是不完整的。
#include <boost/xpressive/xpressive.hpp>
应该可以解决问题。
如果您真的要转发声明您的类型,则必须将其更改为指针(非工作代码,看起来boost使用了静态:: compile(...)):
hpp:
#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
cpp:
#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;
}
}