如何摆脱这些编译器警告?
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++ 中,成员按照声明的顺序进行初始化,而不考虑它们在构造函数初始化列表中的排列顺序。
因此它们的初始化顺序是next
、prev
、value
、key
.
在构造函数中以不同方式列出它们可能会产生误导,因此警告告诉您按照声明的相同顺序列出它们。
当我 运行 我的代码使用以下 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++ 中,成员按照声明的顺序进行初始化,而不考虑它们在构造函数初始化列表中的排列顺序。
因此它们的初始化顺序是next
、prev
、value
、key
.
在构造函数中以不同方式列出它们可能会产生误导,因此警告告诉您按照声明的相同顺序列出它们。