头文件代码定义如下:typedef struct SSharingSet
{
public:
SSharingSet(SSharingSet cFrom_, int cNew_) {m_Number = cFrom_.m_Number; m_Number |= (1 << cNew_);};
bool IsEmpty() {return m_Number == NoElement;};
bool Contains(int nC_) {return (m_Number & (1 << nC_)) != 0;};private:
int m_Number;
}SSharingSet;typedef struct SWeakLearner
{
int nFeatureNum; // Feature number
double dError; // Training error
double dA, dB; // Confidence weights
int nTheta; // Threshold
SSharingSet sN; // Sharing set
double* dK; // Constants for classes not in the sharing set
int nDKDim; //Length for dK;
double dTimeTaken; // Time taken to optimise this weak learner (milliseconds)
}SWeakLearner;class CShapeFilter
{
public:
CShapeFilter();
~CShapeFilter(); void SetTextonIndex(int nIndex_) {m_TextonIndex = nIndex_;};
int GetTextonIndex() {return m_TextonIndex;};
void SetRectangle(Rectangle rRec_) {m_Rec = rRec_;};
Rectangle GetRectangle() {return m_Rec;};
void SetClassList(CClassList cClassList_) {m_ClassList = cClassList_;};
CClassList GetClassList() {return m_ClassList;}; String^ ToString();protected:private:
SWeakLearner m_WL;
Rectangle m_Rec;
int m_TextonIndex;
CClassList m_ClassList;
};但是编译的时候出现如下错误:
1>.\CShapeFilter.cpp(10) : error C2512: “SWeakLearner”: 没有合适的默认构造函数可用构造函数是这样的:
CShapeFilter::CShapeFilter()
{
}哪位知道是什么地方出现了问题?多谢指教
{
public:
SSharingSet(SSharingSet cFrom_, int cNew_) {m_Number = cFrom_.m_Number; m_Number |= (1 << cNew_);};
bool IsEmpty() {return m_Number == NoElement;};
bool Contains(int nC_) {return (m_Number & (1 << nC_)) != 0;};private:
int m_Number;
}SSharingSet;typedef struct SWeakLearner
{
int nFeatureNum; // Feature number
double dError; // Training error
double dA, dB; // Confidence weights
int nTheta; // Threshold
SSharingSet sN; // Sharing set
double* dK; // Constants for classes not in the sharing set
int nDKDim; //Length for dK;
double dTimeTaken; // Time taken to optimise this weak learner (milliseconds)
}SWeakLearner;class CShapeFilter
{
public:
CShapeFilter();
~CShapeFilter(); void SetTextonIndex(int nIndex_) {m_TextonIndex = nIndex_;};
int GetTextonIndex() {return m_TextonIndex;};
void SetRectangle(Rectangle rRec_) {m_Rec = rRec_;};
Rectangle GetRectangle() {return m_Rec;};
void SetClassList(CClassList cClassList_) {m_ClassList = cClassList_;};
CClassList GetClassList() {return m_ClassList;}; String^ ToString();protected:private:
SWeakLearner m_WL;
Rectangle m_Rec;
int m_TextonIndex;
CClassList m_ClassList;
};但是编译的时候出现如下错误:
1>.\CShapeFilter.cpp(10) : error C2512: “SWeakLearner”: 没有合适的默认构造函数可用构造函数是这样的:
CShapeFilter::CShapeFilter()
{
}哪位知道是什么地方出现了问题?多谢指教
{
int nFeatureNum; // Feature number
double dError; // Training error
double dA, dB; // Confidence weights
int nTheta; // Threshold
SSharingSet sN; // Sharing set
double* dK; // Constants for classes not in the sharing set
int nDKDim; //Length for dK;
double dTimeTaken; // Time taken to optimise this weak learner (milliseconds)
}SWeakLearner; //不知道这里typedef还有什么用试试下面这样看行不行
typedef struct S_WEAKLEARNER
{
...
}SWeakLearner;
而SSharingSet没有提供默认的构造函数,所以造成SWeakLearner无法构造,解决办法就是:
一:
typedef struct SWeakLearner
{
...
SSharingSet* psN; // 改为指针
...
}SWeakLearner;二:
typedef struct SSharingSet
{
public:
SSharingSet(){} //给SSharingSet添加默认构造函数
...
}SSharingSet;
跟CShapeFilter构造函数没关系 typedef struct SWeakLearner
{
int nFeatureNum; // Feature number
double dError; // Training error
double dA, dB; // Confidence weights
int nTheta; // Threshold
SSharingSet sN; // Sharing set
double* dK; // Constants for classes not in the sharing set
int nDKDim; //Length for dK;
double dTimeTaken; // Time taken to optimise this weak learner (milliseconds)
}SWeakLearner; //不知道这里typedef还有什么用 试试下面这样看行不行
typedef struct S_WEAKLEARNER
{
...
}SWeakLearner;刚刚尝试了一下,你这样不行,编译器和我刚才报一样的错。
SSharingSet(SSharingSet cFrom_ ,int cNew_) {m_Number = cFrom_.m_Number; m_Number ¦= (1 < < cNew_);}; //这里参数改成SSharingSet& cFrom_试试这方法也不行,还是和刚才一样