求高手解答,修改上面的程序

求高手解答,修改下面的程序
这是我们当时的一道考试题,要求找出错误并改正。程序实现了比较基类中的数据成员是否相等。我编译试了一下,错误在于A& a =* new B(1,1), b= * new B(1,2);处,
error C2259: 'A' : cannot instantiate abstract class due to following members:
可我没发现有什么问题啊(水平太菜了)。。。求解答

#include <iostream>
using namespace std;

class A
{
protected:
    int i;
public:
    A(int x):i(x){}
    virtual int operator!(){return i;}
    virtual int operator==(A&)=0;
};

class B:public A
{
protected:
    int i;
public:
    B(int x, int y):A(x),i(y){}
    int operator==(A& x){
        return !x==A::i;
    }
};


int main()
{
    A& a =* new B(1,1), b= * new B(1,2);
    if (a==b)
    {
        cout << "OK" << endl;
    }
    return 0;
}

------解决方案--------------------

//当我看到这个程序,我在心里骂了一万遍,什么破题!
class A
{
protected:
int i;
public:
A(int x):i(x){}
int operator!(){return i;}
virtual int operator==(A&)=0;
};

class B:public A
{
protected:
int i;
public:
B(int x, int y):A(x),i(y){}
int operator==(A& x)
{
return !x==A::i;
}
};


int main()
{
A& a =* new B(1,1);
A&b= * new B(1,2);
if (a==b)
{
cout << "OK" << endl;
}
return 0;
}

------解决方案--------------------
可以使用 A *a = new B(1,1), *b=  new B(1,2);