C++编译错误,因为私有成员
C++ error compilation because private member
我的主类Task
有一个私有成员:
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的私有成员。
由于Task
是Scheduler
的基类,
Scheduler::Scheduler() {
//nothing here.
}
相当于
Scheduler::Scheduler() : Task() {
//nothing here.
}
由于Task::Task()
是私有的,编译器无法处理该代码。
您可以将Task
的默认构造函数放在protected
部分以消除此错误。这样,客户端就不能使用默认构造函数创建Task
的实例,但Task
的子类可以使用其默认构造函数。
protected:
Task();
Task()
不是private member
,而是private default constructor
。
派生类无法访问private
默认构造函数。你需要使它成为protected
,或者,如果你有另一个可用的成本生成器,使用这个:
class Task
{
public:
Task( int i );
private:
Task();
};
Scheduler::Scheduler()
{ // does not compile, equivalent to the next one
}
Scheduler::Scheduler() : Task()
{ // does not compile
}
Scheduler::Scheduler() : Task(3)
{ // does compile!
}
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 助记符和指向成员语法的指针
- 用于访问容器<T>数据成员的正确 API
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 嵌套在类中时无法设置成员数据
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将函数类成员映射到类本身内部
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 编译器错误,因为构造函数必须显式初始化成员
- 模板构造函数在 MSVC 中失败,因为成员函数与参数类型的名称冲突
- C++编译错误,因为私有成员
- 无法启动抽象类,因为成员是抽象的
- 模板类成员?如何适当地实现此行为,因为没有任何行为?
- 指向对象数组的指针,因为成员会覆盖内存