Q:

C++, Can't instantiate abstract class error

The compiler gives the error cannot instantiate abstract class due to following members:
how do I sort this?
'double PayOff::operator ()(const double &) const' : is abstract

this the abstract class
class PayOff {
public:
    virtual ~PayOff() {}
    virtual double operator()(const double& spot) const = 0;
    virtual std::shared_ptr<PayOff> clone() const = 0;
};

derived class is 
class AsianGeometric: public PayOff{
private:
        double strike;
public:
    AsianGeometric(const double& strike);
    virtual ~AsianGeometric(){};
    virtual double asianpay()(const std::vector<double>& spot_prices) const;
    virtual std::shared_ptr<PayOff> clone()const;
};

AsianGeometric::AsianGeometric(const double& strike){
    this-> strike = strike;
}

double AsianGeometric::asianpay(const std::vector<double>& spot_prices) const{
    unsigned num_times = spot_prices.size();
    double log_sum = 0.0;
    for (unsigned int i=0; i<spot_prices.size(); i++){
        log_sum += log(spot_prices[i]);
    }
    double geom_mean = exp(log_sum/static_cast<double>(num_times));
    if (geom_mean > strike) return geom_mean - strike;
        else return 0;
 }

std::shared_ptr<PayOff> AsianGeometric::clone()const{
    return std::shared_ptr<PayOff>(new AsianGeometric(*this));
 }

A:

You are aware that:
virtual double operator()(const std::vector<double>& spot_prices) const;

Does not override:
virtual double operator()(const double& spot) const = 0;

Right?

