2014-12-13 53 views
0

的imlementation于CentOS 6.5,我有一个类List像:克++警告有关缺少纯虚析

// list.hpp 

namespace foo 
{ 
    class List 
    { 
    public: 
     virtual int reserveMem (int size) = 0; 
     virtual int Insert (int val) = 0; 
     virtual int Find (int val) = 0; 
     virtual bool Empty() = 0; 
    }; 
} 

这是共享库的源代码的一部分。我可以使用g ++(版本4.4.7)构建整个库而不会出现任何错误或警告消息。所使用的编译标志

-g -fPIC -Wall -Wextra -Werror

然后我们有另一个应用程序,它只是包含头文件,其中包括这个头文件,并得到:

list.hpp:14: error: 'class List' has virtual functions and accessible non-virtual destructor

的警告信息是有效的。但是当我建立库时,g ++从不抱怨它。有谁知道为什么?

+0

因为你从来没有创建List类型的对象,所以我猜 – 2014-12-13 01:32:46

+0

为你的类定义一个虚拟析构函数,它将消失。虚拟〜列表(){} – 2014-12-13 02:29:34

+1

你的问题的标题是非常误导,警告与纯虚拟析构函数无关 – 2014-12-13 02:51:17

回答

1

该警告由-Wnon-virtual-dtor选项控制,该选项不包括在-Wall-Wextra中。推测你正在使用不同的警告选项来构建应用程序和库。构建应用程序似乎与-Wnon-virtual-dtor完成启用,或者也许是-Weffc++选项,其中包括-Wnon-virtual-dtor

我认为警告是恼人的和无益的-Wdelete-non-virtual-dtor更加有用,因为它只有当你真正尝试delete一个警告foo::List*,并且包含在-Wall