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

时间:2020-05-10 08:12:00

标签: c++ class linked-list compiler-warnings

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

click here to see compiler warnings

再次重复相同的前六个警告。

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;
    }

我的代码有什么问题??正确的代码实现应该是什么,以免收到任何警告?

1 个答案:

答案 0 :(得分:1)

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

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

因此,它们按照nextprevvaluekey的顺序进行初始化。

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