如何创建一个可以将自己保存为c ++变量的类? [重复]

问题描述 投票:1回答:4

这个问题在这里已有答案:

我对c ++很新,我的大部分写作都是用Python编写的。

在Python中,如果我想创建一个类来保存有关Human的信息,我可以编写一个可以将其“父”作为其变量之一的类。在Python中,我大致会这样做:

class Human:

    def __init__(self, name):
        self.name = name


first = Human("first")
second = Human("second")

second.parent = first

其中second.parent = first说人类second的父母是人类first

在c ++中,我尝试实现类似的东西:

class Human {

    public:
        Human parent;

};

int main() {
    Human first = Human();
    Human second = Human();

    second.parent = first;
}

此示例附带field has incomplete type: Human错误。我明白了,因为它说我的人类对象中没有人类,因为还没有人类的完整定义。当我搜索相关帖子时,我不断使用前向声明和指针来解决问题,但我无法使其正常工作。

我非常感谢任何有助于使c ++示例按照我的意愿行事的帮助。

谢谢。

c++ class oop forward-declaration incomplete-type
4个回答
4
投票

例如,通过使用指针:

struct Human
{
    Human* parent;  // The symbol Human is declared, it's okay to use pointers to incomplete structures
};

int main()
{
    Human first = Human();
    Human second = Human();

    second.parent = &first;  // The & operator is the address-of operator, &first returns a pointer to first
}

您也可以使用引用,但这些引用可能会更难以使用和初始化。


0
投票

指针在这里有意义,指针将内存地址保存到您引用的任何内容,而不将实际数据存储在该类中。

E.G

class Human {

public:
    Human * parent;

};

你的父实际上现在存储为一个内存地址,但是使用* parent它正在使用一个对象,例如你可以这样做:myHuman.parent-> parent( - >表示取消引用,然后是“。”)


0
投票

你能做的是

class Human {

public:
    Human * parent = nullptr;

};

它应该是一个指针,并且更好地初始化。


-1
投票

您可以通过将指针属性保留在相同类型的类中来实现。喜欢

class Human {
...
...
public : Human* parent;
...
...
}

并可用作:

int main()
{
    Human* h1 = new Human;
    Human* h2 = new Human;

    h2->parent = h1;
    ...
    ...
    delete h1;
    delete h2;
}
© www.soinside.com 2019 - 2024. All rights reserved.