我对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”错误。我如何更改第二个类以使其编译?
答案 0 :(得分:4)
您应该尝试通过成员初始化列表在THREADS_REPORT::sthrd
构造函数中初始化THREADS_REPORT
:
THREADS_REPORT(int i) : sthrd(i)
{
}
或为SYNCHED_DATA
提供默认构造函数:
SYNCHED_DATA() {}