[英]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 類型的聲明中進行賦值。 這是沒有意義的!
您可能想在代碼的某些方法中編寫諸如“將值分配給left
的next
字段……”之類的內容。
到目前為止,這是完全無效的 C++ - 也許 go 在您的 C++ 介紹中慢了一點。 從“我寫一個 C++ class 並為其字段賦值”到“我構建一個圖”這一步是不可忽略的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.