2014-06-22 116 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 
};