头文件代码定义如下: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()
{
}哪位知道是什么地方出现了问题?多谢指教

解决方案 »

  1.   

    你需要在SWeakLearner的构造函数中调用SSharingSet的构造函数,完成成员sN的创建
      

  2.   

    跟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;
      

  3.   

    SSharingSet(SSharingSet cFrom_ ,int cNew_) {m_Number = cFrom_.m_Number; m_Number  ¦= (1  < < cNew_);}; //这里参数改成SSharingSet& cFrom_试试
      

  4.   

    因为SWeakLearner有一个成员变量:SSharingSet sN;
    而SSharingSet没有提供默认的构造函数,所以造成SWeakLearner无法构造,解决办法就是:
    一:
    typedef struct SWeakLearner 

    ...
    SSharingSet* psN; // 改为指针
    ...
    }SWeakLearner;二:
    typedef struct SSharingSet 

    public: 
    SSharingSet(){} //给SSharingSet添加默认构造函数
    ...
    }SSharingSet; 
      

  5.   

    To datoucaicai:
    跟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;刚刚尝试了一下,你这样不行,编译器和我刚才报一样的错。
      

  6.   

    To datoucaicai:
    SSharingSet(SSharingSet cFrom_ ,int cNew_) {m_Number = cFrom_.m_Number; m_Number  ¦= (1   <  < cNew_);};  //这里参数改成SSharingSet& cFrom_试试这方法也不行,还是和刚才一样
      

  7.   

    To yang79tao:你的方法可行,看来是忘记给SSharingSet添加默认构造函数添加默认构造函数了,多谢