2012-02-27 27 views
3

コピーできないクラスを作成しようとしていて、そのクラスをmyclassに継承しています。ここでは、コードがどのように見えるかです:コピー不可能なクラスを作成してクラスに継承する

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

削除のように関数を定義するには、deleteキーワードを再利用して第3の機構を可能

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

関連する問題