C++ 错误C2864:&x27;生成器::ci';:类中只能初始化静态常量整型数据成员

C++ 错误C2864:&x27;生成器::ci';:类中只能初始化静态常量整型数据成员,c++,C++,您好,我正在尝试用VistualStudio 2008编译一个应用程序,但显示了以下错误: Error 2 error C2864: 'Generator::ci' : only static const integral data members can be initialized within a class f:\virtualdub\roslogoaway\dehaze\file\main.cpp 99 dehaze Error 3 error C2864:

您好,我正在尝试用VistualStudio 2008编译一个应用程序,但显示了以下错误:

Error   2   error C2864: 'Generator::ci' : only static const integral data members can be initialized within a class    f:\virtualdub\roslogoaway\dehaze\file\main.cpp  99  dehaze
Error   3   error C2864: 'Generator::c' : only static const integral data members can be initialized within a class f:\virtualdub\roslogoaway\dehaze\file\main.cpp  100 dehaze
Error   8   error C2679: binary '-=' : no operator found which takes a right-hand operand of type 'cv::Vec<_Tp,cn>' (or there is no acceptable conversion)  f:\virtualdub\roslogoaway\dehaze\file\main.cpp  340 dehaze
(……)

cv::Mat dehaze(cv::Mat&image,cv::Mat&difference,cv::Point ale,int k,int rho,double xi)
{
cv::Mat output=cv::Mat(image.rows,image.cols,image.type());
浮点数c=1.0/k;
向量ci(k);
std::generate(ci.begin(),ci.end(),Generator(c));
矢量层;
矢量掩模;
矢量微分层;
Vec3f ale_temp=图像在(ale);

对于(int i=0;i)前两个错误是关于“代码> CI <代码> >代码> C>代码>的类初始化。这是C++ 11的特性,仅由Visual C++ 2015和Up支持。您必须在构造函数中初始化它们:

struct Generator
{
    Generator():ci(0.0), c(0.0f) {}
    Generator(float c_init):ci(0.0), c(c_init){}
    float operator()(){ci+=c;return ci;}
    float operator()(float c_init){c=c_init;return c;}
    float ci;
    float c;
};
第三个错误与此无关。您试图从
cv::Mat
中减去
cv::Vec3f
,这没有任何意义。我不知道您在这里试图做什么,因此我无法提供更多帮助

顺便说一下,Visual C++ 2008是旧的。
struct Generator
{
    Generator():ci(0.0){}
    Generator(float c_init):c(c_init){}
    float operator()(){ci+=c;return ci;}
    float operator()(float c_init){c=c_init;return c;}
    float ci=0.0;
    float c=0.0;
};
cv::Mat dehaze(cv::Mat& image,cv::Mat& difference,cv::Point ale,int k,int rho,double xi)
{
 cv::Mat output = cv::Mat(image.rows,image.cols,image.type());
 float c = 1.0/k;
 vector<float> ci(k);
 std::generate(ci.begin(),ci.end(),Generator(c));

 vector<cv::Mat> layers;
 vector<cv::Mat> mask_layers;
 vector<cv::Mat> diff_layers;
 Vec3f ale_temp= image.at<cv::Vec3f>(ale);

 for(int i=0;i<ci.size();i++)
 {
     cv::Mat layer=image.clone();

     layer-=(ci[i]*ale_temp); <------ here
struct Generator
{
    Generator():ci(0.0), c(0.0f) {}
    Generator(float c_init):ci(0.0), c(c_init){}
    float operator()(){ci+=c;return ci;}
    float operator()(float c_init){c=c_init;return c;}
    float ci;
    float c;
};