我正在用 C++ 编写一个玩具正则表达式引擎作为学习练习,但我遇到了编译器错误。以下是实现不同表达式子类型的类的定义:
// ***************************************************************
// ***************************************************************
class RegexExpression {
public:
virtual RegexResult match(std::string);
};
// ***************************************************************
class RegexTerm : public virtual RegexExpression {
public:
RegexTerm(char c) : _matchChar(c) {}
RegexResult match(std::string);
private:
char _matchChar;
};
// ***************************************************************
class RegexNil : public virtual RegexExpression {
public:
RegexResult match(std::string);
};
// ***************************************************************
// ***************************************************************
class RegexBinaryExpression : public virtual RegexExpression {
public:
RegexBinaryExpression
(RegexExpression &lhs, RegexExpression &rhs) :
_lhs(lhs), _rhs(rhs) {}
protected:
RegexExpression _lhs;
RegexExpression _rhs;
};
// ***************************************************************
class RegexOr : public RegexBinaryExpression {
public:
RegexResult match(std::string);
};
// ***************************************************************
class RegexAnd : public RegexBinaryExpression {
public:
RegexResult match(std::string);
};
但是,当我尝试实例化 RegexOr 时,例如:
RegexOr regex(RegexTerm('a'), RegexNil());
然后我得到一个编译器错误,告诉我 RegexBinaryExpression 的 2 参数构造函数不可见。
如果我在 RegexOr 中显式定义构造函数,例如:
RegexOr(RegexExpression &l, RegexExpression &r) : RegexBinaryExpression(l, r) {}
然后我被告知 RegexNil 不能转换为 RegexExpression。
我在这里做错了什么?