C++派生类的"no appropriate default constructor available"

"no appropriate default constructor available" for C++ derived class

本文关键字:default constructor available appropriate no C++ 派生      更新时间:2023-10-16

我对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)
    {
    }
};

但是我在第二类中的两个地方至少收到"错误 C2512"错误(在上面的代码中标记)。我需要如何更改第二个类以使其编译?

您应该尝试通过成员初始值设定项列表初始化THREADS_REPORT构造函数中的THREADS_REPORT::sthrd

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

或为 SYNCHED_DATA 提供默认构造函数:

SYNCHED_DATA() {}