带有另一个类对象的std :: vector的类

时间:2019-07-17 03:26:00

标签: c++ class oop object stdvector

我有两个班级(AB

我需要做一些事情,当我制作一个 class A 的对象(即A obj())时,一个 class B 的向量指向以下对象类A被构造。

即 如果我创建名为A的类obj()的对象,那么我想用vector<'A*'> objects声明类B中向量的第一个元素(即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)

2 个答案:

答案 0 :(得分:1)

@IgorTandetnik 在注释中指出,您在类AB之间有circular dependency。解决方案是将声明和定义分隔到标头源文件中,并相应地包含标头,或者将函数的定义放在同一转换单元中的类声明之后。

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);
}

答案 1 :(得分:0)

```
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);
}