C++ 如何在c+中的类定义之外重载构造函数+;

C++ 如何在c+中的类定义之外重载构造函数+;,c++,C++,好吧,我一直在做一个家庭作业项目,找到了一种方法让我完成家庭作业并交上来,但它仍然困扰着我 我有一个动态分配其他类的基类和一个派生类 //header class Base { Private: Type *type_ptr; Public: Base(); Base(Type &new_type); //getters and setters } class Derived : public Base { Private: Type2 *type2_ptr;

好吧,我一直在做一个家庭作业项目,找到了一种方法让我完成家庭作业并交上来,但它仍然困扰着我

我有一个动态分配其他类的基类和一个派生类


//header
class Base 
{
Private:
   Type *type_ptr;
Public:
   Base();
   Base(Type &new_type);
   //getters and setters
}

class Derived : public Base
{
Private:
  Type2 *type2_ptr;
Public:
 Derived();
 Derived(Type, Type2) : Base(Type);

}
 
我想弄清楚的是,这在我的.cpp文件中应该是什么样子,而不是像这样在线执行

Derived(Type new_type, Type2 new_type2): Base(new_type){
  type2_ptr = new Type2(new_type2);
};
编辑:如果我在我的.cpp中尝试上面的方法,我会得到这样的错误,总是有两个错误

undefined reference to `vtable for Derived'
undefined reference to `vtable for Derived'

在类外,您需要对所有构造函数和函数使用
派生::

Derived::Derived(Type new_type, Type2 new_type2): Base(new_type)
{//^^^^^^^^^ note this  
  type2_ptr = new Type2(new_type2);
};

也考虑使用<代码>初始化列表< /代码>和拥有圣经一样多。这里有一个例子

Derived::Derived(Type new_type, Type2 new_type2): Base(new_type), type2_ptr(new Type2(new_type2))
                                                                //^^^^ note this!
{

};
标题:

/* Base same as yours */

class Derived : public Base
{
Private:
  Type2 *type2_ptr;
Public:
 Derived();
 Derived(Type&, Type2);
}
cpp:


注意
new\u type
是引用,而不是
Derived
中的局部变量,因此传递给Derived的变量必须在适当的范围内

您还没有展示所有内容。在您显示的代码中,有 不应为vtable,因为没有虚拟函数(和 不管继承如何,该类都不是多态的

假设存在虚拟函数,您应该 当然,要在基础中添加一个虚拟析构函数

除此之外,.cpp文件中的定义应为:

Derived::Derived(Type new_type, Type2 new_type2)
    : Base(new_type)
    , type2_ptr(new Type2(new_type2))
{
}
在您的定义前面添加派生::,然后 您公开的代码中没有任何会导致问题的内容。您 真的应该提供一个完整的代码示例
造成问题;否则,我们只能猜测。

的可能重复似乎我看到的是一个完全不同的错误,它编译得很好,但不会链接。如果没有可以编译的代码,很难诊断此类错误。你能发布一个最小但完整的代码示例来重现错误吗?我会在完成cl后尝试实现今天很糟糕。在这一点上,我更好奇是什么导致了这种错误。
Derived::Derived(Type new_type, Type2 new_type2)
    : Base(new_type)
    , type2_ptr(new Type2(new_type2))
{
}