C ++, столкновение имен в разных пространствах имен - PullRequest
2 голосов
/ 12 июня 2010

Я сбит с толку следующим столкновением имен:

namespace mp2 {

boost::numeric::ublas::matrix_range<M>
slice(M& m, const R1& r1, const R2& r2) {
    namespace ublas = boost::numeric::ublas;
    ublas::range r1_(r1.begin(), r1.end()), r2_(r2.begin(), r2.end());
    return ublas::matrix_range<M>(m, r1_, r2_);
}

double energy(const Wavefunction &wf) {
    const Wavefunction::matrix& C = wf.coefficients();
    int No = wf.occupied().size();

    foreach (const Basis::MappedShell& P, basis.shells()) {
        slice(C, range(No), range(P));

ошибка из g ++ 4.4 равна

 7 In file included from mp2.cpp:1:
 8 /usr/include/boost/numeric/ublas/fwd.hpp: In function âdouble mp2::energy(const Wavefunction&)â:
 9 /usr/include/boost/numeric/ublas/fwd.hpp:32: error: âboost::numeric::ublas::sliceâ is not a function,
10 ../../src/mp2/energy.hpp:98: error:   conflict with âtemplate<class M, class R1, class R2> boost::numeric::ublas::matrix_range<M> mp2::slice(M&, const R1&, const R2&)â
11 ../../src/mp2/energy.hpp:123: error:   in call to âsliceâ
12 /usr/include/boost/numeric/ublas/fwd.hpp:32: error: âboost::numeric::ublas::sliceâ is not a function,
13 ../../src/mp2/energy.hpp:98: error:   conflict with âtemplate<class M, class R1, class R2> boost::numeric::ublas::matrix_range<M> mp2::slice(M&, const R1&, const R2&)â
14 ../../src/mp2/energy.hpp:129: error:   in call to âsliceâ
15 make: *** [mp2.lo] Error 1

ublas сегмент равен

namespace boost { namespace numeric { namespace ublas {
    typedef basic_slice<> slice;

почему срез в убласе сталкивается со срезом в mp2?Я и вполне уверен, что в коде и в числе нет using namespace ublas.

спасибо

1 Ответ

2 голосов
/ 12 июня 2010

Я думаю, что поиск зависит от аргумента .

slice(C, range(No), range(P));

Два range аргумента, по-видимому, взяты из boost::numeric::ublas (вероятно, импортированы с using boost::numeric::ublas::range;), поэтому компилятор рассматривает имена из этого пространства имен, в которое входит тип slice.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...