在派生 class 中定义自定义 return 类型的受保护方法?

Defining a protected method of custom return type within a derived class?

使用 C++ 并尝试编写一种方法,其中 returns 类型 thing 的实体在其父 class 中定义为受保护,但出现以下错误:

'thing' does not name a type

class A {
protected:
    struct thing{

    };
};

class B : public A {
    thing getThing();
};

thing B::getThing(){ // Error occurs on this line
    return new thing;
}

我怎样才能做到这一点?

您需要在 getThing 上的 return 类型前面加上 A:::

A::thing B::getThing(){
    return thing();
}

thingA 的命名空间内声明,因此当 A 不在该命名空间中时,您需要指定。尽管如此,您的代码仍无法编译,因为您将 getThing 声明为 return 一个 thing,但现在它 return 是一个 thing *。您需要将其更改为 return thing() 或将声明更改为 return a thing *.

这里有两个问题。

首先,您必须将thing限定在命名空间A.

A::thing B::getThing(){ // Error occurs on this line
    return new thing;
}

此外,new thing 将 return 转换为 thing*,它不能隐式转换为 thing,因此您需要 return A::thing*return thing().