【发布时间】:2013-08-26 05:51:34
【问题描述】:
我试过这段代码:
class A
{
virtual void foo() = 0;
};
class B
{
virtual void foo() = 0;
};
class C : public A, public B
{
//virtual void A::foo(){}
//virtual void B::foo(){}
virtual void A::foo();
virtual void B::foo();
};
void C::A::foo(){}
void C::B::foo(){}
int main()
{
C c;
return 0;
}
使用注释部分是可以的,但是当我尝试在类声明之外编写定义时,编译器会报错。 我正在使用 MSVC11 编译器,有人知道如何编写吗? 我需要将代码移动到 cpp 文件中。
谢谢~~
【问题讨论】:
-
注释部分在 gcc 中也不起作用。
-
这完全没有意义。它应该只是
virtual void foo();,并且只有一次。 -
[dcl.meaning]/1 禁止在(成员)函数的声明中使用 qualified-id:“当 declarator-id 被限定时,声明应引用限定符所引用的类或命名空间的先前声明的成员[...]”;因此任何
virtual void X::foo();都是非法的(作为C中的声明)。 -
实际上在DyP's remark 之后,我之前评论中链接的代码具有误导性,因为
C::A::foo真正的意思是A::foo(感谢@DyP)。以下是更简单的示例:ideone.com/HCYM1X 和 ideone.com/vdRp3X。
标签: c++ function class virtual multiple-inheritance