Hi, does anyone know whats wrong with this code. It doesn't compile on gcc-mingw 4.1.2.
it works on msvc visual studio 2005.
code:
template <class InputIterator>
typename InputIterator::difference_type kmean::getClusterIndex(InputIterator first, InputIterator last)
{
typedef typename InputIterator::value_type T;
BOOST_STATIC_ASSERT(boost::is_floating_point<T>::value);
#ifdef __DEBUG__
boost::prof::profiler p;
#endif
T min(std::numeric_limits<T>::max());
typedef typename InputIterator::difference_type diff_type;
diff_type index(0);
diff_type currentIndex(0);
std::for_each(first, last,
(
boost::lambda::if_then(boost::lambda::_1 < boost::lambda::var(min),
(
boost::lambda::var(min) = boost::lambda::_1,
boost::lambda::var(index) = boost::lambda::var(currentIndex)
)),
++boost::lambda::var(currentIndex)
)
);
#ifdef __DEBUG__
std::cerr << "finish getClusterIndex\n";
#endif
return index;
}
error message:
C:/Boost/include/boost/lambda/detail/lambda_functor_base.hpp: In member function 'boost::lambda::identity<ptrdiff_t&>& boost::lambda::identity<ptrdiff_t&>::operator=(const boost::lambda::identity<ptrdiff_t&>&)':
C:/Boost/include/boost/lambda/detail/lambda_functor_base.hpp:23: instantiated from 'typename InputIterator::difference_type kmean::getClusterIndex(InputIterator, InputIterator) [with InputIterator = __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >]'
./cs522/c++/kmeanMain.cpp:70: instantiated from here
C:/Boost/include/boost/lambda/detail/lambda_functor_base.hpp:23: error: non-static reference member 'ptrdiff_t& boost::lambda::identity<ptrdiff_t&>::elem', can't use default assignment operator
C:/Boost/include/boost/lambda/detail/lambda_functors.hpp: In member function 'boost::lambda::lambda_functor<boost::lambda::identity<ptrdiff_t&> >& boost::lambda::lambda_functor<boost::lambda::identity<ptrdiff_t&> >::operator=(const boost::lambda::lambda_functor<boost::lambda::identity<ptrdiff_t&> >&)':
C:/Boost/include/boost/lambda/detail/lambda_functors.hpp:113: note: synthesized method 'boost::lambda::identity<ptrdiff_t&>& boost::lambda::identity<ptrdiff_t&>::operator=(const boost::lambda::identity<ptrdiff_t&>&)' first required here
./cs522/c++/def/kmeandef.hpp: In function 'typename InputIterator::difference_type kmean::getClusterIndex(InputIterator, InputIterator) [with InputIterator = __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >]':
./cs522/c++/def/kmeandef.hpp:406: note: synthesized method 'boost::lambda::lambda_functor<boost::lambda::identity<ptrdiff_t&> >& boost::lambda::lambda_functor<boost::lambda::identity<ptrdiff_t&> >::operator=(const boost::lambda::lambda_functor<boost::lambda::identity<ptrdiff_t&> >&)' first required here
make: *** [project/kmeanMain.o] Error 1