在派生 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();
}
thing
在 A
的命名空间内声明,因此当 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()
.
使用 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();
}
thing
在 A
的命名空间内声明,因此当 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()
.