以下代码给我一个同时使用clang和gcc的错误'print2' is not a member of 'N'
:
#include <stdio.h>
struct Printer
{
template<class T>
void print(T t)
{
N::print2(*this, t);
}
};
namespace N
{
void print2(Printer& p, int v)
{
printf("%d\n", v);
}
}
int main()
{
Printer p;
p.print(1);
}
如果删除命名空间N并使print2
函数成为全局函数,它将起作用。为什么将函数放置在命名空间中时查找不一样?不幸的是,我无法将print2
函数移到struct Printer
之前,这显然是解决方案。
答案 0 :(得分:2)
在这里,我只是在Printer之前声明该功能,然后再定义该功能的逻辑。
#include <stdio.h>
namespace N {
void print2(int);
}
struct Printer
{
template<class T>
void print(T t)
{
N::print2(t);
}
};
namespace N
{
void print2(int v)
{
printf("%d\n", v);
}
}
int main()
{
Printer p;
p.print(1);
}