gpt4 book ai didi

C++ 错误编译,因为私有(private)成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:59 24 4
gpt4 key购买 nike

我的主类 Task 有一个私有(private)成员:

private:
Task();

我添加了一个派生类Scheduler,继承自类Task:

class Scheduler : public Task {
friend class Task;`

我创建了一个文件Scheduler.cc来实现派生类Scheduler的构造函数:

Scheduler::Scheduler() {
//nothing here.
}

我尝试使用空白的构造函数 Scheduler 进行编译,但我收到一个编译错误,我不理解其中的关系,因为我的构造函数 Scheduler 是空白的:

/tmp/PROJETO/T1/booos-t1/lib/Task.h: In constructor ‘BOOOS::Scheduler::Scheduler()’:
/tmp/PROJETO/T1/booos-t1/lib/Task.h:41:2: error: ‘BOOOS::Task::Task()’ is private
Scheduler.cc:13:22: error: within this context
make[1]: ** [Scheduler.o] Erro 1

我想了解我的问题,因为我没有尝试在我的 Scheduler 构造函数中访问类 Task 的私有(private)成员。

最佳答案

由于 TaskScheduler 的基类,

Scheduler::Scheduler() {
//nothing here.
}

相当于

Scheduler::Scheduler() : Task() {
//nothing here.
}

由于 Task::Task() 是私有(private)的,编译器无法处理该代码。

您可以将 Task 的默认构造函数放在 protected 部分以消除此错误。这样,客户端无法使用默认构造函数创建 Task 的实例,但 Task 的子类可以使用其默认构造函数。

protected:
Task();

关于C++ 错误编译,因为私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29421959/

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