2012-02-27 1 views
3

Я пытаюсь создать класс, не подлежащий копированию, и наследовать его в myclass. Вот как выглядит код: «удален»Создание класса Noncopyable и наследование в моем классе

template<class T> 
struct NonCopyable 
{ 
protected: 
    NonCopyable() {} 
private: 
    NonCopyable(const NonCopyable& x) = delete; 
    T& operator=(const T& x) = delete; 
}; 

Функция удаления позволяет третий механизм посредством повторного использования удаления ключевого слова, чтобы определить функцию

class Myclass : public RefCnt, private NonCopyable<Myclass> 
{ 
    virtual unsigned int GetID() = 0; 
    virtual bool Serialize() = 0; 
}; 

Теперь, когда я пытаюсь это, я получить сообщение об ошибке на моем VS 2010 как: «NonCopyable»: спецификатор чистого или абстрактного переопределения разрешен только для виртуальной функции.

Компилятор думает, что я пытаюсь создать не виртуальную функцию как чистую. Может кто-нибудь объяснить, почему? Я могу решить вышеупомянутую проблему, удалив ключевое слово «удалить».

+3

Я подозреваю, что ответы: '= delete' еще не поддерживается вашим компилятором. У меня нет VS 2010, чтобы подтвердить это. – Flexo

+0

Я думал то же самое, но как это проверить? – jan

+3

Если вы используете '= delete', просто используйте его напрямую, а не наследуйте от класса, который его использует. И да, VS10 не поддерживает это. –

ответ

4

Вы можете видеть из этого post, что vs2010 не поддерживает функции по умолчанию или удаленные функции. В этом отношении не будет vc11

+0

О, спасибо за эту информацию! – jan