gpt4 book ai didi

c++ - 从派生类访问基类保护的嵌套类

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:33 25 4
gpt4 key购买 nike

伙计们,我在技术博客上遇到了这个问题,问题是解决以下代码中生成的编译器错误的正确解决方案是什么。我已经搜索了几个小时,但无法得到答案。

class SomeClass
{
public:
int data;
protected:
class Nest
{
public:
int nested;
};
public:
static Nest* createNest(){return new Nest;}
};

void use_someclass()
{
SomeClass::Nest* nst = SomeClass::createNest();
nst->nested = 5;
}

A.    Make function void use_someclass() a friend of class SomeClass.
B.    Make the function createNest() a non-static function of SomeClass.
C.    Declare the class Nest in public scope of class SomeClass.
D.    Make the object nst a reference object, and make the function
createNest() return a Nest&.
E.    Derive a class from SomeClass. Make the object nst a derived class
pointer so that it can access SomeClass's protected declarations.

C 肯定是正确且简单的。我相信 A 也是对的,尤其是 E 是做这类事情的经典方式。我想实现 E 中所说的内容,但有一些困难。 (希望有人也能实现A中的想法),下面是我的代码:

class derived:public SomeClass{};
void use_someclass()
{
derived::Nest *nst=SomeClass::createNest();
nst->nested = 5;
}

在上面,想法是我们可以从派生类访问 Nest 定义。在函数use_someclass()中,第一行右边是静态函数,返回类型为Nest*,但是左边不知道怎么匹配右边的类型。 “derived::Nest”是错误的。编译器错误:无法访问 protected 成员。 Nest只是SomeClass中的定义,不是成员。

我们可以用什么来代替“derived::Nest”? derived当然看到了Nest的定义,但是不知道怎么“说”出来。也许以某种方式通过“this”指针。

最佳答案

您可以更改派生类中的可见性:

class derived : public SomeClass {
public:
using SomeClass::Nest;
}

关于c++ - 从派生类访问基类保护的嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34129050/

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