求助:虚函数重写错误C3668
请看下面三个简单的类
class base1
{
public:
class Delegate
{
public:
virtual void f1()=0;
protected:
virtual ~Delegate(){}
};
base1(){}
virtual ~base1(){}
};
class base2:public base1::Delegate
{
public:
class Delegate
{
public:
virtual void f2()=0;
protected:
virtual ~Delegate(){}
};
typedef Delegate base2Delegate;
base2(){}
virtual ~base2(){}
};
class child:public base2::Delegate
{
public:
// 显示重写base2::Delegate定义的接口,但2005不认。将f2改为f1或者将基类声明为base2::base2Delegate则正常编译。
virtual void f2() override;
};
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
使用Visual Studio 2005 SP1编译出现:
overide.cpp(108) : error C3668: “child::f2”: 包含重写说明符“override”的方法没有重写任何基类方法
使用Visual Studio 2010编译一切正常。
求解决方法,是否有相关补丁什么的?非常感谢!
class base1
{
public:
class Delegate
{
public:
virtual void f1()=0;
protected:
virtual ~Delegate(){}
};
base1(){}
virtual ~base1(){}
};
class base2:public base1::Delegate
{
public:
class Delegate
{
public:
virtual void f2()=0;
protected:
virtual ~Delegate(){}
};
typedef Delegate base2Delegate;
base2(){}
virtual ~base2(){}
};
class child:public base2::Delegate
{
public:
// 显示重写base2::Delegate定义的接口,但2005不认。将f2改为f1或者将基类声明为base2::base2Delegate则正常编译。
virtual void f2() override;
};
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
使用Visual Studio 2005 SP1编译出现:
overide.cpp(108) : error C3668: “child::f2”: 包含重写说明符“override”的方法没有重写任何基类方法
使用Visual Studio 2010编译一切正常。
求解决方法,是否有相关补丁什么的?非常感谢!
...全文
相关推荐
CheckSuperCalls:确保您的虚函数调用基础[c ++]
**纯虚函数**:如果基类的虚函数没有实现,而是声明为`= 0`,那么这个基类就是一个抽象类,不能实例化。子类必须重写这个纯虚函数才能被实例化。
C++虚函数实现原理
<< "Base1::析构" << endl; }};class Base2{private: int c;public: Base2() { c = 2; } virtual void fun0()
虚函数与重载函数的关系
f(char); // 错误,返回类型不同,丧失了虚函数特性 void f(int, int); // 错误,参数数量不同,丧失了虚函数特性};```在这两个例子中,`Derived`试图重载`Base
多态性与虚函数习题
**答案**: A.virtual可以用来声明虚函数 - **解释**: `virtual`关键字用于声明虚函数,其他选项描述不准确或错误。7.
C++继承,虚函数与多态性专题.
- 在基类中声明虚函数,然后在派生类中重写这些虚函数来实现多态性。


