gpt4 book ai didi

c++ - 基类构造函数对派生类 C++ 不可见

转载 作者:行者123 更新时间:2023-11-30 01:57:24 25 4
gpt4 key购买 nike

我正在用 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。

我在这里做错了什么?

最佳答案

至少在 C++11 之前,您必须自己在 RegexOr 中实现构造函数。但是,您将其实现为采用非 const 引用参数,然后您尝试从临时绑定(bind),这是语言禁止的。

取而代之的是通过 const 引用获取参数(或者甚至可能通过值):

RegexBinaryExpression(const RegexExpression &lhs, const RegexExpression &rhs)
: _lhs(lhs)
, _rhs(rhs)
{}

RegexOr(const RegexExpression &l, const RegexExpression &r) : RegexBinaryExpression(l, r) {}

关于c++ - 基类构造函数对派生类 C++ 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18746276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com