【发布时间】:2015-04-14 12:46:52
【问题描述】:
此代码无法编译:
class A;
void foo(A&) {
}
class A {
void foo() {
foo(*this); ///This does not compile
}
};
错误:
error: no matching function for call to 'A::foo(A&)'
foo(*this);
^
note: candidate is:
note: void A::foo()
这可以通过调用::foo(*this);来解决
但是,让我们考虑一下我们在命名空间中的情况:
namespace bar {
class A;
void foo(A&) {
}
class A {
void foo() {
foo(*this); ///This does not compile
}
};
}
除了显式调用bar::foo(*this);,还有其他方法吗?我的意思是,有没有办法在下一个周围的声明性区域中查找名称,即包含 bar 命名空间?
用例类似于here。
【问题讨论】:
-
有一种方法:将
foos 中的一个重命名为其他名称,这样也可以为您节省一些不眠之夜。 -
您的示例与此问题无关。这个例子是一个多态的例子,这是一个名称查找问题。
-
@NathanOliver 我更正了指向该问题的已接受答案的指针。
-
我的评论还是一样。该解决方案使用多态性。
-
虽然命名空间类似于文件系统中的目录,但没有等同于
../。您得到的最接近的是*this与./
标签: c++ class namespaces