0

有人可以解释为什么以下代码error C2065: 'select' : undeclared identifier在编译时给出错误():

namespace N { 
    class MyClass{ 

    }; 
    template<int I> void select(MyClass*)
    {}
}
void g (N::MyClass* mp) 
{ 
    select<10>(mp); 
}
void main()
{}

根据 Argument Dependent Lookup,这应该可以正常工作,因为我已经N::在 `g`s 参数中指定了。因此,选择应该对编译器可见。

为什么 ADL 在这里不起作用?

4

2 回答 2

0

你试过 N::select 吗?那个或一个

using namespace N

应该可以工作,因为根本select不可见

于 2013-10-25T11:28:56.590 回答
0

每当您使用与当前所在的命名空间不同的类时,您必须直接引用它 ( N::select) 或设置 using 命名空间 ( using namespace N;) 或为其设置直接 using 语句以供将来使用 ( using N::select)

为了消除歧义,我会查看thisthis,它们之间的哪个应该为您提供一个良好的开端,让您了解如何/为什么不能简单地调用 select。

干杯,请随时与我联系以获取更多信息。

于 2013-10-25T13:26:02.607 回答