如何摆脱这些编译器警告?

How to get rid of these compiler warnings?

当我 运行 我的代码使用以下 LRUCache 构造函数的实现时 class,我得到 12 个编译器警告,如下所示:

再次重复同一组前六个警告。

struct Node{
   Node* next;
   Node* prev;
   int value;
   int key;
   Node(Node* p, Node* n, int k, int val):prev(p),next(n),key(k),value(val){};
   Node(int k, int val):prev(NULL),next(NULL),key(k),value(val){};
};

class Cache{

   protected: 
   map<int,Node*> mp;     //map the key to the node in the linked list
   int cp;                //capacity
   Node* tail;            // double linked list tail pointer
   Node* head;            // double linked list head pointer
   virtual void set(int, int) = 0;     //set function
   virtual int get(int) = 0;           //get function

};

class LRUCache : public Cache
{
private:
    int count;
public:
    LRUCache(int capacity)
    {
        cp = capacity;
        tail = NULL;
        head = NULL;
        count = 0;
    }

我的代码有什么问题??正确的代码实现应该是什么才不会收到任何警告??

这里的问题是 Node 结构中的初始化顺序。

在 C++ 中,成员按照声明的顺序进行初始化,而不考虑它们在构造函数初始化列表中的排列顺序。

因此它们的初始化顺序是nextprevvaluekey.

在构造函数中以不同方式列出它们可能会产生误导,因此警告告诉您按照声明的相同顺序列出它们。