2014-12-13 52 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