C++ 多重继承抽象类
测试h test.cppC++ 多重继承抽象类,c++,C++,测试h test.cpp class A { public: virtual void FunctionA(void) = 0; virtual ~A(void); }; class B { public: virtual void FunctionB(void) = 0; virtual ~B(void); }; class C:public A, public B { public: v
class A
{
public:
virtual void FunctionA(void) = 0;
virtual ~A(void);
};
class B
{
public:
virtual void FunctionB(void) = 0;
virtual ~B(void);
};
class C:public A, public B
{
public:
virtual ~C(void) = 0;
};
为什么出现警告C4505'C:~C':未引用的本地函数已被删除?您不能纯声明函数并在类体中定义它,它只是不是合法语法。我不知道警告意味着什么,你的编译器认为这意味着什么 您需要这样做(对于所有纯虚拟析构函数) 或者,由于每个类中至少有一个纯虚函数,因此在这种情况下,将析构函数设置为纯虚函数没有任何实际价值,因此您可以(在类体中)执行以下操作: 编辑:此外,对于
a::function()
和B::FunctionB()
,B::FunctionB()
,这是一个重复的返回类型。我从那里再次询问我的答案:
这是MSVC++2010及更早版本中的一个错误。代码实际上是
即使编译器声称已删除代码,仍调用。似乎是
在MSVC++2012中修复。其他编译器(如gcc或clang)不会发出警告。
根据C++03标准第10.4.2节,语法“…=0{…}”是非法的(即使MSVC++没有抱怨),正如已经指出的:
注意:函数声明不能同时提供纯说明符和
定义
但是,定义纯虚拟析构函数通常并不违法,第12.4.7节规定:
析构函数可以声明为虚拟(10.3)或纯虚拟(10.4);如果
在中创建该类或任何派生类的任何对象
程序中,应定义析构函数。如果一个类有一个基类
对于虚拟析构函数,其析构函数(无论是用户还是
隐式声明)是虚拟的
我禁用警告的方法是在标题中添加以下行:
virtual ~A() {}
<代码> >如果定义(μMSCYFER)&(实际上,GCC给了我一个更让人放心的代码<错误:函数定义< /COD>纯纯说明符)我修改了代码。但是它仍然有警告。(通过VisualStudioC++编译器)如果这是头文件(后编辑),您需要标记析构函数
内联
,因为定义不在类主体中。我将析构函数标记为内联,但警告不会消失。请发布一个显示警告的最小完整可编译示例。与您的问题无关:如果参数列表为空,则不需要将void
放入参数列表中这是C中唯一需要的,不是C++的,如果我使用C++编译,不能在参数中放“空格”吗?
class A {
public:
virtual void FunctionA() = 0;
virtual ~A() = 0;
};
inline A::~A() {}
virtual ~A() {}
#if defined(_MSC_VER) && (_MSC_VER <= 1600)
# pragma warning(disable:4505)
#endif