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