c++ - C++ 前向声明具有初始化列表的类构造函数
问题描述
我正在尝试将我的类分成头文件和实现文件:
这有效:
头文件.hpp
class MyBaseClass {
public:
MyBaseClass(int arg1, int arg2);
};
class MyDerivedClass {
public:
MyDerivedClass(int arg1, int arg2, int arg3);
};
实现.cpp
MyBaseClass::MyBaseClass(int arg1, int arg2) {
// do something
}
MyDerivedClass::MyDerivedClass(int arg1, int arg2, int arg3) {
// do something
}
但是,我想利用继承,但这不起作用:
头文件.hpp
class MyDerivedClass : public MyBaseClass {
public:
MyDerivedClass(int arg1, int arg2, int arg3) : MyBaseClass(int arg1, int arg2);
};
VSCode 说expected '{' or ','
,我尝试并得出结论,它想要这样的东西:
头文件.hpp
class MyDerivedClass : public MyBaseClass {
public:
MyDerivedClass(int arg1, int arg2, int arg3) : MyBaseClass(int arg1, int arg2) {
// implementation here
}
};
我在这里遗漏了什么,还是我想要的分离不是 C++ 的工作方式?这看起来像是将构造函数调用“扩展”到父级的明显方式,类似于 Java 的super();
.
感谢您的时间。
解决方案
在MyDerivedClass
你想调用MyBaseClass
构造函数,而不是声明它,所以只需传递参数,不要尝试声明它们。所以删除int
之前的arg1
和arg2
。
class MyDerivedClass : public MyBaseClass {
public:
MyDerivedClass(int arg1, int arg2, int arg3) : MyBaseClass(arg1, arg2) {
// implementation here
}
};
如果要将MyDerivedClass
构造函数移动到 cpp 文件,则将其放入标题中:
class MyDerivedClass : public MyBaseClass {
public:
MyDerivedClass(int arg1, int arg2, int arg3);
};
并将其放入 cpp 文件中:
MyDerivedClass::MyDerivedClass(int arg1, int arg2, int arg3)
: MyBaseClass(arg1, arg2)
{
}
推荐阅读
- javascript - 材质 UI 选择不动态填充选项
- javascript - Firestore 函数导入错误:“尝试导入错误:'arrayUnion' 未从 'firebase/firestore' 导出。”
- apache-kafka - 使用 TCP 套接字和 Deno 向 Kafka 代理发送消息
- sql - 插入到 postgresql jsonb 字段中
- r - 如何以简洁的方式将多个回归的结果存储在单个数据框中
- reactjs - 如何在 Next.js 中使用 NODE_ENV=development 环境进行构建?
- tabs - 如何在 Vue3 中使用 vue-router-tab?
- machine-learning - 训练模型后的预测数据与实际数据不相似
- spring - Spring Boot 2.5.x:所需的请求部分“文件”不存在
- excel - 保持基于单元格的重复行