我不明白爲什麼這段代碼不能編譯:命名空間衝突在C++
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
轉換成它自己的超類。根據我的理解,它不應該。它爲什麼這樣做?
所謂的Koenig查找,實際上在3.4節中描述。2的C++標準。 – 2009-07-16 17:43:36
那麼如果VS編譯這個,這是一個錯誤? – liori 2009-07-16 17:45:18