Я пытаюсь создать класс, не подлежащий копированию, и наследовать его в 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»: спецификатор чистого или абстрактного переопределения разрешен только для виртуальной функции.
Компилятор думает, что я пытаюсь создать не виртуальную функцию как чистую. Может кто-нибудь объяснить, почему? Я могу решить вышеупомянутую проблему, удалив ключевое слово «удалить».
Я подозреваю, что ответы: '= delete' еще не поддерживается вашим компилятором. У меня нет VS 2010, чтобы подтвердить это. – Flexo
Я думал то же самое, но как это проверить? – jan
Если вы используете '= delete', просто используйте его напрямую, а не наследуйте от класса, который его использует. И да, VS10 не поддерживает это. –