【问题标题】:How to get rid of these compiler warnings?如何摆脱这些编译器警告?
【发布时间】:2020-08-25 18:31:12
【问题描述】:

当我使用 LRUCache 类的构造函数的以下实现运行我的代码时,我收到 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;
    }

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

【问题讨论】:

  • 这是两个警告,每一个都是三行。
  • 看起来你的构造函数的初始化列表与定义成员的顺序不同。

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


【解决方案1】:

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

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

因此它们按nextprevvaluekey 的顺序初始化。

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

【讨论】:

  • 感谢您指出这一点。这实际上是来自hackerrank的问题代码,我应该只实现LRUCache类。但是当我在我的编译器上尝试这样做时,它向我显示了这些警告,我从没想过这是由于他们的错误而不是我的错误,所以我没有看它。非常感谢您的回复... :)
  • 警告可能因编译器而异,在这种情况下,错误排序不会导致任何问题。在重要的奇怪场合将它们按正确的顺序排列只是一个好习惯。
猜你喜欢
  • 1970-01-01
  • 2017-01-25
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多