Boost logo

Ublas :

Subject: Re: [ublas] vector * vector ambiguity causes compilation error
From: Jesse Manning (manning.jesse_at_[hidden])
Date: 2009-08-05 11:11:19


assuming you want element wise multiplication of 2 vectors you would use the
element_prod function. the * operator for vectors is meant for scalar/vector
operations.

On Wed, Aug 5, 2009 at 10:52 AM, Mark Johnson <mj1_at_[hidden]> wrote:

> I'm trying to use the * operator on a pair of vectors, but it seems the
> vector * scalar and scalar * vector version of the operators also match.
> Can anyone recommend a fix or a work-around? I'm using the version of
> Boost that comes pre-installed on Fedora 11, which I think is 1.37.
>
> Thanks in advance for your help,
>
> Mark
>
> Example:
>
> #include <iostream>
> #include <boost/numeric/ublas/io.hpp>
> #include <boost/numeric/ublas/vector.hpp>
> #include <boost/numeric/ublas/vector_expression.hpp>
>
> int main(int argc, char** argv) {
> boost::numeric::ublas::scalar_vector<double> v(2, 2);
> std::cout << "v = " << v*v << std::endl;
> }
>
>
> when compiled produces
>
> g++ utmp.cc
> utmp.cc: In function ‘int main(int, char**)’:
> utmp.cc:8: error: ambiguous overload for ‘operator*’ in ‘v * v’
> /usr/include/boost/numeric/ublas/vector_expression.hpp:1399: note:
> candidates are: typename
> boost::numeric::ublas::vector_binary_scalar2_traits<E1, const T2,
> boost::numeric::ublas::scalar_multiplies<typename E1::value_type, T2>
> >::result_type boost::numeric::ublas::operator*(const
> boost::numeric::ublas::vector_expression<E>&, const T2&) [with E1 =
> boost::numeric::ublas::vector<double,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double> > >,
> T2 = boost::numeric::ublas::vector<double,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double> > >]
> /usr/include/boost/numeric/ublas/vector_expression.hpp:1174:
> note: typename
> boost::numeric::ublas::vector_binary_scalar1_traits<const T1, E2,
> boost::numeric::ublas::scalar_multiplies<T1, typename E2::value_type>
> >::result_type boost::numeric::ublas::operator*(const T1&, const
> boost::numeric::ublas::vector_expression<E2>&) [with T1 =
> boost::numeric::ublas::vector<double,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double> > >,
> E2 = boost::numeric::ublas::vector<double,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double> > >]
>
>
>
> _______________________________________________
> ublas mailing list
> ublas_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/ublas
> Sent to: manning.jesse_at_[hidden]
>