2012-11-01 92 views
0

我正在做一個任務,我被要求在C++中實現鏈表。到目前爲止,除了當我創建一個新列表時,一切都很好。在我的方法create_list()。在將內容和身份號碼分配給我的Field並嘗試撥打GetNext()後,我收到一條錯誤消息:Request for member 'GetNext()' in 'Node' which is a non-class type '*Field'.我對C++語法和麪向對象編程還不熟悉。我究竟做錯了什麼?我想通過使用行Field *Node = new Field(SIZE, EMPTY);我的變量Node將是類型Field ...?C++鏈表實現

#include <iostream> 
#include <ctype.h> 

using namespace std; 

typedef enum { EMPTY, OCCUPIED } FIELDTYPE; 

// Gameboard Size 
int SIZE; 

class Field { 

private: 
int _SquareNum; 
FIELDTYPE _Content; 
Field* _Next; 

public: 
// Constructor 
Field() { } 

// Overload Constructor 
Field(int SquareNum, FIELDTYPE Entry) { _SquareNum = SquareNum; _Content = Entry; } 

// Get the next node in the linked list 
Field* GetNext() { return _Next; } 

// Set the next node in the linked list 
void SetNext(Field *Next) { _Next = Next; } 

// Get the content within the linked list 
FIELDTYPE GetContent() { return _Content; } 

// Set the content in the linked list 
void SetContent(FIELDTYPE Content) { _Content = Content; } 

// Get square/location 
int GetLocation() { return _SquareNum; } 

// Print the content 
void Print() { 

    switch (_Content) { 

     case OCCUPIED: 
      cout << "Field " << _SquareNum << ":\tOccupied\n"; 
      break; 
     default: 
      cout << "Field " << _SquareNum << ":\tEmpty\n"; 
      break; 
    } 

} 

}*Gameboard; 

這裏是我的create_list()方法:

void create_list() 
{ 
int Element; 


cout << "Enter the size of the board: "; 
cin >> SIZE; 
for(Element = SIZE; Element > 0; Element--){ 
    Field *Node = new Field(SIZE, EMPTY); 
    Node.GetNext() = Gameboard; // line where the error is 
    Gameboard = Node; 
    } 
} 

回答

1

沒有在聲明

Field *Node = new Field(SIZE, EMPTY); 

節點的類型是指針還田。

如果您有一個指向某個類的指針,並且您想訪問該類的成員使用->,修正很簡單。

Node->GetNext() = Gameboard; 

我認爲你的代碼有其他錯誤,我不認爲即使這個'修復'它會工作。可能你真正想要的是

Node->SetNext(Gameboard); 
+0

真棒謝謝....現在,我真的覺得它更有意義.... – accraze

1

你打電話Node.GetNext(),但Node是一個指針。您需要使用->運營商,而不是.運營商,如Node->GetNext()

+0

試過,但現在我得到這個錯誤:「需要左值作爲轉讓的左操作數」 – accraze

+0

@SunHypnotic看到我的答案。 – john

3

.用於尋址對象中的成員和對象的引用。然而,Node指向的一個對象。所以你需要把它變成一個參考,然後才能和.一起使用它。這意味着要做(*Node).GetNext()。或者您可以使用簡寫:Node->GetNext() - 這兩個完全相同。

一個很好的記憶使用的是您使用指針尖尖的操作:)

0

如果你想設置爲l值,函數必須返回一個參考值。 你的代碼需要一些變化:

// Get the next node in the linked list 
Field& GetNext() { return *_Next; } 

那麼你可以使用該功能作爲一個左值

Node->GetNext() = *Gameboard;