0

私は、C++ でリンク リストを実装するように求められる割り当てに取り組んでいます。これまでのところ、新しいリストを作成しているときを除いて、すべてがうまく機能しています。私の方法でcreate_list()。コンテンツと ID 番号を my に割り当てFieldて呼び出そうとすると、「C++ 構文とオブジェクト指向プログラミングはまだ初めてですGetNext()」というエラーが表示されます。Request for member 'GetNext()' in 'Node' which is a non-class type '*Field'.私は何を間違っていますか?Field *Node = new Field(SIZE, EMPTY);行を使用して、変数Nodeがクラス型になると思いましたField...?

#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;
    }
}
4

4 に答える 4

3

.オブジェクト内のメンバーおよびオブジェクトへの参照のアドレス指定に使用されます。Nodeただし、オブジェクトへのポインタです。したがって、 で使用する前に参照に変換する必要があります.。これは、 を行うことを意味し(*Node).GetNext()ます。または、省略形を使用することもできます: Node->GetNext()- これら 2 つはまったく同じです。

使用するのに適したニーモニックは、ポインターで pointy 演算子を使用することです:)

于 2012-11-01T06:23:21.640 に答える
1

宣言にはありません

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

ノードはフィールドへのポインタ型です。

クラスへのポインタがあり、そのクラスのメンバーにアクセスしたい場合、修正は簡単です->

Node->GetNext() = Gameboard;

あなたのコードには他のエラーがあると思います、そして私はこの「修正」があってもそれがうまくいくとは思いません。おそらくあなたが本当に欲しいのは

Node->SetNext(Gameboard);
于 2012-11-01T06:24:45.963 に答える
1

を呼び出しNode.GetNext()ていますNodeが、ポインターです。->のように、演算子の代わりに演算子.を使用する必要がありますNode->GetNext()

于 2012-11-01T06:23:17.333 に答える
0

左辺値として設定する場合、関数は参照値を返す必要があります。コードを変更する必要があります。

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

次に、関数を左辺値として使用できます

Node->GetNext() = *Gameboard; 
于 2012-11-01T06:52:59.123 に答える