【发布时间】:2015-04-06 21:11:32
【问题描述】:
伙计们,为什么这段代码不起作用?
template <typename t>
class Abstract
{
public:
~Abstract(){}
virtual Abstract<t>& operator +(Abstract<t>&) = 0;
};
template <typename t>
class Not_Abstract : public Abstract
{
t* tab; //let Not_Abstract store an array of objects of type t, whatever
public:
~Not_Abstract(){ delete[] tab; }
Not_Abstract<t>& operator +(Not_Abstact<t>&);
};
虽然我不知道,既然引用是一个指针,那么两个运算符的定义是等价的;但它们似乎是独立的功能。有什么办法可以在“抽象”中保留虚拟运算符并仍然使代码正常运行?
【问题讨论】:
-
编译器应该给出一个明确的错误。编辑:Clang 在
Not_Abstract声明行给出 error: expected class name。这不是很清楚,但Abstract是一个模板,而不是一个类。除此之外,一个简单的错字是一个明显的错误,否则它会编译。不确定您遇到了什么问题。 -
我们不是 Fellas 我们是 coders。完全不同。 :)
-
@chris 您可能需要明确说明:它们应该继承自
Abstract<t>。 -
减 1:请发布实际演示您遇到的问题的代码。上面的代码无法在完全不同的行上编译。如果你解决了这个问题,请告诉我,我会反转负 1。
标签: c++ templates operators abstract-class