求助:虚函数重写错误C3668
本帖最后由 eleqi 于 2013-03-22 10:10:25 编辑 请看下面三个简单的类
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编译一切正常。
求解决方法,是否有相关补丁什么的?非常感谢!
Visual?Studio?2005 C3668 显示重写虚函数
[解决办法]
帮你试了一下 g++-4.7 和 vs 2012 都没问题,目测编译器的问题了。
[解决办法]
#include <iostream>
#include <typeinfo>
using namespace std;
class A {};
class B : public A {};
int main(int argc, char **argv) {
cout << typeid(B::A).name() << endl;
return 0;
}
class base1
{
class Delegate
{
public:
virtual void f1()=0;
protected:
virtual ~Delegate(){}
};
public:
typedef Delegate delegate_type;
base1(){}
virtual ~base1(){}
};
class base2 : public base1::delegate_type
{
class Delegate
{
public:
virtual void f2()=0;
protected:
virtual ~Delegate(){}
};
public:
// 如果没有这个typedef,base2::delegate_type绝对是不存在的
typedef Delegate delegate_type;
base2(){}
virtual ~base2(){}
};
class child:public base2::delegate_type
{
public:
virtual void f2() override;
};