我的基类:
//Element.h
class Element
{
public:
Element();
virtual ~Element(){}; // not sure if I need this
virtual Element& plus(const Element&);
virtual Element& minus(const Element&);
};
派生模板类:
//Vector.h
#include "Element.h"
template <class T>
class Vector: public Element {
T x, y, z;
public:
//constructors
Vector();
Vector(const T& x, const T& y = 0, const T& z =0);
Vector(const Vector& u);
...
//operations
Element& plus(const Element&) const;
Element& minus(const Element&) const;
...
};
...
//summation
template <class T>
Element& Vector<T>::plus(const Element& v) const
{
const Vector<T>& w = static_cast<const Vector<T>&>(v);
Vector<T>* ret = new Vector<T>((x + w.x), (y + w.y), (z + w.z));
return *ret;
}
//difference
template <class T>
Element& Vector<T>::minus(const Element& v) const
{
const Vector<T>& w = static_cast<const Vector<T>&>(v);
Vector<T>* ret = new Vector<T>((x - w.x), (y - w.y), (z - w.z));
return *ret;
}
我有这个代码的另一个问题(在 another post 中回答),但目前我正在努力解决这个事实,如果我尝试运行它,我得到
这是因为派生模板类与基类不在同一个文件中,这会导致编译器问题(类似于我必须在头文件中定义整个 Vector 类的方式)?
我对 C++ 相当陌生,仍在阅读什么是 vtables 以及它们是如何工作的,但我还不能完全弄清楚这一点。
最佳答案
我认为编译器/链接器在告诉您 Undefined symbols: "Element::plus(Element const&)"
时意味着它。这些符号(元素的加号和减号)已声明但尚未定义。
关于c++ - 从派生模板类调用函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3079980/