Кто сталкивался с данной проблемой при работе с OpenCV? Язык С++, работаю в VS2013.
Ошибка 1 error C2864: "cv::sfinae::has_parenthesis_operator::value": статический элемент данных с инициализатором внутри класса должен иметь неизменяемый целочисленный тип const c:\users\admin\documents\visual studio 2013\projects\opencv2\core\cvstd_wrapper.hpp 52 1 Second_test
Вот собственно и весь код:
#include "opencv2/core/core.hpp"
#include <opencv2/core/types_c.h>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/core/core_c.h>
#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
int main(int argc, char** argv)
{
system("pause");
return 0;
}
Объявление этой строке в cvstd_wrapper.hpp имеет вид
static CV_CONSTEXPR bool value = type::value;
Такое объявление будет корректным в С++ только если CV_CONSTEXPR заменяется на constexpr или на const (или на inline, но здесь подразумевается константность).
Определение макроса в cvdef.h имеет вид
#ifndef CV_CONSTEXPR
# if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900/*MSVS 2015*/)
# define CV_CONSTEXPR constexpr
# endif
#endif
#ifndef CV_CONSTEXPR
# define CV_CONSTEXPR
#endif
То есть по какой-то причине они не определяют CV_CONSTEXPR как const тогда, когда не могут определить его как constexpr. Это странно.
История изменений показывает такое 22 дня назад
#ifndef CV_CONSTEXPR
- # define CV_CONSTEXPR const
+ # define CV_CONSTEXPR
#endif
То есть const там таки был, но некто "alalek" выкосил этот const нафиг. Скорее всего он исправлял что-то другое, но в результате "убил" это место в cvstd_wrapper.hpp. К тому же, судя по тому, что это fallback, это "перетягивание каната" длится уже некоторое время. Типичный опенсорсовский бардак.
Как видно по комментарию к этому коммиту, в других местах кода у них используются объявления вида
static CV_CONSTEXPR const int var = ...;
с явным const. Но раз "alalek" сделал это исправление, то тогда нужно приводить к этому виду - с явным const - все такие места, включая cvstd_wrapper.hpp тоже.
Либо ждите пока исправят этот косяк, либо берите более новую версию VS и работайте в режиме C++11 или выше.
Продвижение своими сайтами как стратегия роста и независимости