c – 使用声明(派生类)
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 *)和B2 :: fb()被视为B2 :: fb(B2 *)?也就是说,隐含参数,有助于区分这些吗?
解决方法
C标准(C03§7.3.3/ 12)解释:
在您的示例中,B2 :: fb()隐藏了using声明引入的B1 :: fb(). 至于为什么两者都使用B1 :: d是不正确的;和int d;在B2的定义中,C标准(C03§7.3.3/ 10)解释了:
因此,由于以下形式不正确,它的结构不正确:它会在单个声明区域中生成两个具有相同名称的对象: struct S { int d; int d; }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |