Я не могу понять, почему этот кусок кода не компилируется:
namespace A {
class F {}; // line 2
class H : public F {};
}
namespace B {
void F(A::H x); // line 7
void G(A::H x) {
F(x); // line 9
}
}
Я использую gcc 4.3.3
, и ошибка:
s3.cpp: In function ‘void B::G(A::H)’:
s3.cpp:2: error: ‘class A::F’ is not a function,
s3.cpp:7: error: conflict with ‘void B::F(A::H)’
s3.cpp:9: error: in call to ‘F’
Я думаю, что, поскольку в строке 9 нет префикса пространства имен, F(x)
должно означать только B::F(x)
. Компилятор пытается привести x
в свой суперкласс. В моем понимании этого не должно быть. Почему он это делает?