ITK 4.3을 컴파일하다보니까 여기서 에러가 난다. mailing list를 뒤져보니 똑같은 문제로 고민하는 사람이 있었다. 그러나 1년이 지난 지금에도 해결책은 올라오지 않았고, 어쩔수 없이 직접 workaround를 찾을 수 밖에 없었다.
처음에는
/usr/local/itk/InsightToolkit-4.0.0/Modules/Core/QuadEdgeMesh/include/itkGeometricalQuadEdge.hxx:32:1: error: initializer invalid for static member with constructor
/usr/local/itk/InsightToolkit-4.0.0/Modules/Core/QuadEdgeMesh/include/itkGeometricalQuadEdge.hxx:32:1: error: (an out of class initialization is required)
/usr/local/itk/InsightToolkit-4.0.0/Modules/Core/QuadEdgeMesh/include/itkGeometricalQuadEdge.hxx:32:1: error: ‘itk::GeometricalQuadEdge::m_NoPoint’ cannot be initialized by a non-constant expression when being declared
이게 뭔소리야 하고 고민했었는데, 코드를 살펴보니 이유를 알 수 있었다.
itkGeometricalQuadEdge.hxx의 33번째 혹은 34번째 줄을 살펴보면
m_NoPoint = vcl_numeric_limits<OriginRefType>::max()
라는 부분이 나온다. 그런데 이 max()
라는 것이 사실은 runtime시에 실행이 되므로 const expression이 아닌 것이다. c++11에서 사용하는 constexpr
만 있어도 쉽게 해결이 될 것 같은데, 궁여지책으로 다음과 같이 boost::integer_traits
를 사용하면 일단 무리없이 컴파일 할 수 있다.
m_NoPoint = boost::integer_traits<OriginRefType>::const_max
Workaround for Compilation error in itkGeometricalQuadEdge.hxx
Change
vcl_numeric_limits<OriginRefType>::max()
to
boost::integer_traits<OriginRefType>::const_max
around line 33~34 in itkGeometricalQuadEdge.hxx.
Ps. I tried to post my workaround to Insight-users mailing list, but my message is rejected (why?) -_-
댓글
댓글 쓰기