How to derive a base class with a class that only has a constructor with parameters when the base class doesn't specify a constructor?
我有一个从未实例化过的基类(我们称之为base class)(这是否称为虚拟基类?).另一个类(让我们调用usingclass)使用它,以便它可以将不同的派生类(derivedclassn)作为输入。因为我从未显式地实例化这个基类,所以我没有为它定义构造函数。派生类有一个构造函数,该构造函数采用基类不知道的类型,因此它不重写任何构造函数。我想知道为这两个类编写构造函数的正确方法。
现在,在baseclass i中,我声明在usingclass和derivedclass0中使用的公共变量和虚拟函数,重写这些函数,定义这些变量,并声明和定义接受参数的构造函数。但我得到以下错误:
1 2 3 4 | undefined reference to `typeinfo for BaseClass' undefined reference to `vtable for BaseClass' test.o: In function `DerivedClass::~DerivedClass()' |
我理解这是因为我从未为基类编写过构造函数或重写过无参数默认构造函数。但我这样做是没有意义的。派生类的构造函数的参数复杂到只在无参数的构造函数中实例化,而基类不知道派生类的参数以声明要覆盖的基类中的构造函数。所以我想知道我该怎么做。事先谢谢。
编辑
实际代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | class BaseClass { public: virtual ~BaseClass(); virtual double get(int the_params); virtual void set(int he_params); int _a_local; }; class DerivedClass : public BaseClass { private: int _priveate_variables; void private_function(); public: explicit DerivedClass(int the_int); virtual double get(int the_int); virtual void set(int the_int); }; DerivedClass::DerivedClass(int the_int) : _priveate_variables(the_int) { _priveate_variables++; _a_local=_priveate_variables; } double DerivedClass::get(int the_int) { return 0.0; } void DerivedClass::set(int the_int) { _priveate_variables = 2; } |
错误
1 2 3 4 5 6 7 8 | /usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/../../../../lib/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' /tmp/ccC1wbix.o: In function `BaseClass::BaseClass()': CodeForThem.cc:(.text._ZN9BaseClassC2Ev[_ZN9BaseClassC5Ev]+0x9): undefined reference to `vtable for BaseClass' /tmp/ccC1wbix.o: In function `DerivedClass::~DerivedClass()': CodeForThem.cc:(.text._ZN12DerivedClassD2Ev[_ZN12DerivedClassD5Ev]+0x20): undefined reference to `BaseClass::~BaseClass()' /tmp/ccC1wbix.o:(.rodata._ZTI12DerivedClass[_ZTI12DerivedClass]+0x10): undefined reference to `typeinfo for BaseClass' collect2: error: ld returned 1 exit status |
您不需要为
至于链接错误,这可能是因为您没有为您的