Во первых, это ошибка компилятора, а не линкера.
Во вторых, ошибка про массив, а у тебя в коде массива нету...
Вот такое компилируется без ошибок:
Код
class Sensor
{
public:
Sensor();
virtual ~Sensor() = 0;
virtual bool isValid() const = 0;
};
class SensorFreq : public Sensor
{
public:
SensorFreq();
~SensorFreq();
virtual bool isValid() const;
} sf;
В третьих, зачем тебе виртуальный деструктор? Или ты будешь объекты по указателю на базу убивать?