我对以下名称冲突感到困惑:
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;
为什么ublas中的slice与mp2中的slice冲突?
我可以肯定的是,代码和包含中没有
using namespace ublas
。谢谢
最佳答案
我认为argument-dependent lookup正在进行。
slice(C, range(No), range(P));
看来
range
中有两个boost::numeric::ublas
参数(可能是通过using boost::numeric::ublas::range;
导入的),因此编译器会考虑此命名空间中的名称,其中包括slice
类型。关于c++ - C++,跨不同 namespace 的名称冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3027697/