C++"不能将参数声明为抽象类型

Ed *_*d L 9 c++ abstract-class abstract

我正在尝试用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;
};
Run Code Online (Sandbox Code Playgroud)

似乎我不能以这种方式超载'<'和'>'运算符,所以我想知道我能做些什么来解决这个问题.

Tom*_*m W 27

您的操作员函数正在通过副本接受其参数.但是,由于纯虚函数,无法构造新的GameNode实例.您可能希望通过引用接受这些参数.


Ben*_*igt 6

抽象类型只是有用的,因为它们是多态的,实际上它们必须以多态方式使用(这是虚拟和纯虚拟的摘要之间的区别).

多态性需要引用或指针.在这种情况下,您需要参考.

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