C++“无法声明参数为抽象类型”

10

我正在尝试在C++中实现通用包装器,以便能够比较两个东西。我已经按照以下方式完成了它:

template <class T>
class GameNode {
    public:
        //constructor
        GameNode( T value )
            : myValue( value )
        { }

        //return this node's value
        T getValue() {
            return myValue;
        }

        //ABSTRACT
        //overload greater than operator for comparison of GameNodes
        virtual bool operator>( const GameNode<T> other ) = 0;

        //ABSTRACT
        //overload less than operator for comparison of GameNodes
        virtual bool operator<( const GameNode<T> other ) = 0;

    private:
        //value to hold in this node
        T myValue;
};

看起来我无法以这种方式重载'<'和'>'运算符,所以我想知道有什么办法可以解决这个问题。

2个回答

35

您的运算符函数是通过复制其参数来接受它们的。 但是,由于纯虚拟函数的存在,无法构造新的GameNode实例。 您可能希望改为通过引用来接受这些参数。


6

抽象类型之所以有用,是因为它们具有多态性,实际上必须以多态方式使用(这是虚拟和纯虚拟aka抽象的区别)。

多态性需要引用或指针。在这种情况下,您需要一个引用。

按值传递尝试通过复制参数来创建新对象,但无法创建抽象类型的实例。通过引用传递使用现有实例而不是创建新实例,并避免了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接