gpt4 book ai didi

c++ - 使用另一个类对象的 std::vector 类

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:27 24 4
gpt4 key购买 nike

我有两个类(AB)

我需要做一些事情,当我创建一个 class A 的对象(即 A obj() )时,构建一个指向 class A 对象的 class B 的 vector .

即如果我创建一个名为 A 的类 obj() 的对象,那么我希望 B 类中 vector 的第一个元素(即 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)

最佳答案

正如@IgorTandetnik 在您的评论中指出的那样circular dependency在类 AB 之间。解决方案是将声明和定义分离到头源文件并相应地包含头文件,或者将函数定义放在同一个翻译单元中的类声明之后。

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

关于c++ - 使用另一个类对象的 std::vector 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57068118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com