[英]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.