c++ - "no appropriate default constructor available"用于 C++ 派生类

标签 c++ class templates struct

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

然后我从另一个类(class)使用它:

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

但我至少在第二个类中的两个位置出现“error C2512”错误(在上面的代码中标记。)我需要如何更改第二个类才能使其编译?

最佳答案

您应该尝试通过成员初始化列表在 THREADS_REPORT 构造函数中初始化 THREADS_REPORT::sthrd:

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

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

SYNCHED_DATA() {}

关于c++ - "no appropriate default constructor available"用于 C++ 派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13736972/

相关文章:

C++/g++ : Concurrent program

c++ - 递增二进制值(无符号字符)

c++ - 单行指针操作

C++如何将关键字 'friend'与来自两个类的成员函数一起使用相互包含

c# - 为什么我的方法没有在代码中调用,却被 Unity 调用了?

c++ - 将返回类型推导为模板参数方法的类型

c++ - MPI 通讯器管理

class - Grails新域实例返回null

c++ - C++ 中的访问说明符

Javascript 模块不可用模板不是从基本 Django 模板继承的