簡體   English   中英

cpp初始化object為其他class的成員變量時編譯報“error: unknown type name”

[英]Cpp Compile "error: unknown type name" when initializing object as member variable of other class

我是 C++ 的新手。我正在另一個 class LCache中初始化一個 class object Node 當我嘗試編譯我的代碼時,出現以下錯誤:

Line 22: Char 5: error: unknown type name 'left'
    left -> next = right;
    ^

下面是我寫的代碼:

class Node{
public:
    int k;
    Node* prev;
    Node* next;
    
    Node (int key){
        k=key;
        prev=NULL;
        next=NULL;
    }
};

class LCache {
private:
    Node* left = new Node(0);
    Node* right = new Node(0);
    left -> next = right;
    right -> prev = left;
...

當我left -> next = right; right -> prev = left; class LCache的方法中,錯誤消失了。 你能在這里解釋一下原因嗎?

您不能像您嘗試做的那樣在 class 聲明中執行非聲明語句。 您需要在 class 成員 function 內部執行它們,或者在這種情況下在 class 構造函數內部執行(就像您對Node所做的那樣),例如:

class Node{
public:
    int k;
    Node* prev;
    Node* next;
    
    Node (int key){
        k = key;
        prev = NULL;
        next = NULL;
    }
};

class LCache {
private:
    Node* left = new Node(0);
    Node* right = new Node(0);

    LCache() {
        left->next = right;
        right->prev = left;
    }

    ~LCache() {
        delete left;
        delete right;
    }

    ...
};

話雖如此:

NULL在現代 C++ 中已棄用,請改用nullptr

並且只要您擁有在使用完畢后需要釋放的指針,就應該使用智能指針。 或者更好的是,當您實際上不需要時,不要動態使用對象。

嘗試更像這樣的東西:

class Node{
public:
    int k;
    Node* prev = nullptr;
    Node* next = nullptr;
    
    Node (int key) : k(key) {}
};

class LCache {
private:
    std::unique_ptr<Node> left = std::make_unique<Node>(0);
    std::unique_ptr<Node> right = std::make_unique<Node>(0);

    LCache() {
        left->next = right;
        right->prev = left;
    }

    ...
};

/* alternatively:

class LCache {
private:
    Node left{0};
    Node right{0};

    LCache() {
        left.next = &right;
        right.prev = &left;
    }

    ...
};
*/

您正在嘗試在 class 類型的聲明中進行賦值。 這是沒有意義的!

您可能想在代碼的某些方法中編寫諸如“將值分配給leftnext字段……”之類的內容。

到目前為止,這是完全無效的 C++ - 也許 go 在您的 C++ 介紹中慢了一點。 從“我寫一個 C++ class 並為其字段賦值”到“我構建一個圖”這一步是不可忽略的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM