Class 与另一个 class 个对象的 std::vector

Class with a std::vector of another class objects

我有两个 classes(AB

当我将 class 的对象 A(即 A obj())作为 [ 的向量时,我需要做一些事情=38=] B 指向class的对象被构​​造A.

即 如果我创建一个名为 class A 的对象 obj(),那么我希望 class B 中向量的第一个元素(即 vector<'A*'> objects )由obj().

 objects[0] = obj()

代码:

class B;
class A
{
public:
    A(int _location)
    {
        location = _location;
        pointer_B->redefine(this); // here in this line(14) I get two errors
    }

private:
    int location;
    B* pointer_B;
};

class B
{
public:
    void redefine(A* cur_obj)
    {
        objects.push_back(cur_obj);
    }

private:
    vector<A*> objects;
};

错误是:

use of undefined type B   (line 14)    
left of '->redefine' must point to class/struct/union/generic type (line 14)
```
class B;
class A
{
public:
    A(int _location);
private:
    int location;
    B* pointer_B;
};

class B
{
public:
    void redefine(A* cur_obj)
    {
        objects.push_back(cur_obj);
    }
private:
    vector<A*> objects;
};
A::A(int _location)
{
        location = _location;
        pointer_B->redefine(this);
}

正如 @IgorTandetnik 在评论中指出的那样,您在 class AB 之间有 circular dependency。解决方案是将声明和定义分开到 header-source 文件并相应地包含 headers 或将函数定义放在同一翻译单元中 classes 的声明之后。

class B;
class A
{
public:
    A(int _location);
    // .... other declarations  
};

class B
{
public:
    void redefine(A* cur_obj);
    // ...
};
// definitions 
A::A(int _location) {
    location = _location;
    pointer_B->redefine(this);
}

void B::redefine(A* cur_obj) {
    objects.push_back(cur_obj);
}

其他备注:

也就是说,改为:

class A
{
public:
    explicit A(int _location, B *obj);
   //^^^^^^^                 ^^^^^^^^^
    ....
}

A::A(int _location, B *obj)
    : location{ _location }
    , pointer_B{ obj }
{
    pointer_B->redefine(this);
}