Простейший пример:
#include <boost/numeric/ublas/matrix.hpp>
using namespace boost::numeric;
int main() {
ublas::bounded_matrix<double, 3, 3> m, m1, m2;
m = m1 * m2;
}
вызывает ошибку компиляции:
error C2666: 'boost::numeric::ublas::operator`*'' : 2 overloads have similar conversions
Подобные проблемы с другими операторами, +, -, = для векторов или матриц. Google наличие проблемы подтвердил, но решения я не нашёл.
Здравствуйте, Экселенц, Вы писали:
Э>вызывает ошибку компиляции:
Э>error C2666: 'boost::numeric::ublas::operator`*'' : 2 overloads have similar conversions
Из документации к boost::uBlas :
Multiplication of matrices
matrix_expression prod<matrix_type > (const matrix_expression &, const matrix_expression &);
matrix_expression prod (const matrix_expression &, const matrix_expression &);
Если тебе нужно умножить матрицы, юзай
prod, и всё будет OK.
А то, что ты написал, вызывает сообщение, говорящее о том, что компилятор пытается выбрать
из 2
scalar операций над матрицами, и не может

Вот если бы ты написал m = m1 * 3; то он бы сделал всё ОК.
Э>Подобные проблемы с другими операторами, +, -, = для векторов или матриц.
Как ни пытался, не смог найти проблемы, о котрых ты гоаворишь — у меня всё ОК работает.
Э>Google наличие проблемы подтвердил, но решения я не нашёл.
Здесь он ни к чему — читай, что компилятор пишет
С уважением,
Стас
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Вот пример:
ublas::bounded_vector<double, 3> v, v1, v2;
v = v1 + v2;
error C2666: 'boost::numeric::ublas::vector<T,A>::operator`='' : 3 overloads have similar conversions
Здравствуйте, Экселенц, Вы писали:
Э>Вот пример:
Э>Э>ublas::bounded_vector<double, 3> v, v1, v2;
Э>v = v1 + v2;
Э>
Э>error C2666: 'boost::numeric::ublas::vector<T,A>::operator`='' : 3 overloads have similar conversions
Вот такой код с 6 warning-ами компилится спокойно:
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/io.hpp>
namespace ublas = boost::numeric::ublas;
template<class V>
void initialize_vector (V &v) {
int size = v.size ();
for (int i = 0; i < size; ++ i)
v [i] = i + 1.f;
}
void main()
{
ublas::bounded_vector<double, 3> v, v1, v2;
initialize_vector (v1);
initialize_vector (v2);
std::cout << v1 << std::endl;
std::cout << v2 << std::endl;
v = v1 + v2;
std::cout << v << std::endl;
/*
==============Output=================
[3](1,2,3)
[3](1,2,3)
[3](2,4,6)
*/
}
Boost — 1.32,
VC 7.1 — cl.exe 13.10.3077.0
C уважением,
Стас
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Да, лействительно, в boost 1.32 всё нормально компилится. Но я пробовал на 1.31 и там были эти проблемы. Просматривая change log при выходе 1.32, не помню, чтобы видел там изменения в uBLAS. Может я не прав, в любом случае придётся переходить на 1.32.
Спасибо за помощь!