首页 > 解决方案 > 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();.

感谢您的时间。

标签: c++inheritance

解决方案


MyDerivedClass你想调用MyBaseClass构造函数,而不是声明它,所以只需传递参数,不要尝试声明它们。所以删除int之前的arg1arg2

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)
{
}

推荐阅读