0

C++ クラス定義で混乱しました。誰かが私を助けることができますか?

私はそのように定義された元のテンプレートクラスを持っています:

template <typename T> 
struct SYNCHED_DATA{
    SYNCHED_DATA(int r)
    {
        var_R = r;
    }

    void set(T* pV)
    {
        var_T = *pV;
    }

    //...

private:
    //Copy constructor and assignments are NOT available!
    SYNCHED_DATA(const SYNCHED_DATA& s)
    {
    }
    SYNCHED_DATA& operator = (const SYNCHED_DATA& s)
    {
    }

    T var_T;
    int var_R;
};

そして、私は別のクラスからそれを使用します:

struct THREADS_REPORT{
    THREADS_REPORT()     //error C2512: 'SYNCHED_DATA<T>' : no appropriate default constructor available
    {
    }

    void getReport(THREADS_REPORT_DATA* pOutReport)
    {
        //Retrieve report array
        sthrd.get(pOutReport);
    }
    void setReport(THREADS_REPORT_DATA* pReport)
    {
        //Set report array
        sthrd.set(pReport);
    }

private:
    SYNCHED_DATA<THREADS_REPORT_DATA> sthrd;

    //Copy constructor and assignments are NOT available!
    THREADS_REPORT(const THREADS_REPORT& s)   //error C2512: 'SYNCHED_DATA<T>' : no appropriate default constructor available
    {
    }
    THREADS_REPORT& operator = (const THREADS_REPORT& s)
    {
    }
};

しかし、少なくとも 2 番目のクラス (上記のコードでマークされている) の 2 つの場所で「エラー C2512」エラーが発生します。コンパイルするには、2 番目のクラスをどのように変更する必要がありますか?

4

1 に答える 1

4

メンバー初期化子リストを介してコンストラクターでTHREADS_REPORT::sthrd初期化を試みる必要があります。THREADS_REPORT

 THREADS_REPORT(int i) : sthrd(i)
 {
 }

または、次のデフォルトのコンストラクターを提供しますSYNCHED_DATA

SYNCHED_DATA() {}
于 2012-12-06T04:35:00.240 に答える