您好我正在尝试使用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
产生这些错误的代码部分是:
template <class ForwardIterator,class Generator>
void generate(ForwardIterator first,ForwardIterator last,Generator g)
{
while(first!=last)
{
*first++ = g();
}
}
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
我不知道如何解决这个问题。非常感谢您的帮助
答案 0 :(得分:1)
前两个错误是关于ci
和c
的课堂初始化。这是一个C ++ 11功能,只有Visual C ++ 2015及更高版本支持。您必须在构造函数中初始化它们:
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::Vec3f
中减去cv::Mat
,这没有任何意义。我不知道你在这里做了什么,所以我无法提供更多的帮助。
顺便说一句,Visual C ++ 2008 old 。