繁体   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