2014-06-22 93 views
1

我试图让C++的基础知识的窍门,和我被困在这一段代码:错误:没有指定类型,设置指针类时为0

#include<iostream> 

using namespace::std; 

class Node 
{ 
public: 
    int x; 
    Node *ptr_next; 

}; 

class LinkedList 
{ 
public: 
    Node *head; 
    head = 0; //If I comment out this line the code compiles 
}; 

int main() 
{ 
    LinkedList linked_list; 
    return 0; 
} 

当我运行上面我得到这个错误:

error: ‘head’ does not name a type 

我不明白为什么我不能设置head0;我看着this question,它似乎是上述错误的一个可能的原因是编译器不知道什么引用的类(在我的案例Node是)。但是,这不应该是这种情况,因为如果我只是声明head是指向Node我的代码运行良好。这是当我尝试设置head0上述错误引发。我错过了什么?

如果我忽略了LinkedList类,并更改main到:

int main() 
{ 
    Node *head; 
    head = 0; 
    return 0; 
} 

代码编译的罚款。所以这是我缺少的NodeLinkedList之间的一些互动。它是什么?

+3

使用NSDMI或构造函数。 – chris

+2

你不能在类声明中编写代码来初始化东西(除非使用类似于const int的东西),请使用构造函数来执行它。 –

+0

谢谢你们,向'LinkedList'类添加构造函数可以解决问题。 – Akavall

回答

4

C++ 11允许在类中初始化非静态数据成员;这在标准中被称为括号或相等初始化程序。初始值设定项必须出现在数据成员的声明中。但是你试图在一个单独的语句中初始化它。代码更改为

class LinkedList 
{ 
public: 
    Node *head = nullptr; // don't use 0 to initialize pointers 
}; 

而且,正如其名字大括号或相等的初始值设定暗示,初始化也可以使用支撑,初始化列表完成。所以下面的作品也是

class LinkedList 
{ 
public: 
    Node *head{}; // value-initializes the pointer 
};