C++ 错误C2864:&x27;生成器::ci';:类中只能初始化静态常量整型数据成员
您好,我正在尝试用VistualStudio 2008编译一个应用程序,但显示了以下错误: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:
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;
};