6
struct B1{
int d;
void fb(){};
};
struct B2 : B1{
using B1::d;
using B1::fb;
int d; // why this gives error?
void fb(){} // and this does not?
};
int main(){}
是因爲,B1::fb()
如B1::fb(B1*)
and B2::fb()
爲B2::fb(B2*)
治療如何治療?也就是說,是否隱含參數,有助於區分這些?使用聲明(派生類)
$ 13.3.1/4-
對於由使用-聲明引入 成一個派生類 ,該函數被認爲是 是派生類的一個成員爲 的目的nonconversion功能定義隱式對象參數的類型 。
和INT d與之前使用的聲明衝突... – diverscuba23 2010-08-23 04:56:26
在這種情況下,$ 13.3.1/4的真實含義是什麼? – Chubsdad 2010-08-23 05:08:05
@chubsdad:由於'B2 :: fb()'隱藏了B1 :: fb()',因此在重載過程中'B1 :: fb()'不被視爲候選函數,所以§13.3.1/ 4會不適用。 – 2010-08-23 05:10:02