gpt4 book ai didi

C++03 调用成员函数时解析圆圈组合

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:38 24 4
gpt4 key购买 nike

我有以下类结构。这显然不会编译。我可以转发声明 B。然后,我可以在函数调用中使用函数指针,但这不是一个好的解决方案,因为我会从 A::funcA 调用 A 中的其他函数,或者将 B 的声明的一部分放入 header 中,这将是几百行并且很实用。

处理这种情况的首选方法是什么?

class B;

class A
{
public:
void funcA(B* b);
double funcA2();
int funcA4(B* b);

private:
E memberA1;
E memberA2;
};

void A::funcA( B* b) {
b->funcB(a->memberA1, a->memberA2);

class B : public BBase
{
public:
void FuncB(E* e1, E* e2)
{
/* using const objects of B that are initialized
by B() and some other functions... */
}

std::vector<C*> memberB1; // C has std::vector<A*> memberC1
};

int main() {
calling B->memberB1.at(0)->memberC1.at(0)->funcA();
}

我有以下内容(省略了一些不必要的行):

啊啊

Class B;

Class A {
declaration of A
};

A.cpp ....

B.h

#include "A.h"
#include "BBase.h"

Class B {
declaration of B
};

B.cpp ....

BBase.h

#include "C.h"
#include "A.h"
#include "AInterface.h"

typedef std::vector<AInterface> AList;

BBase {
declaration of abstract BBase
};

BBase.cpp ....`

但我仍然遇到错误:成员访问不完整类型“B”。

最佳答案

假设 EC 已被充分声明/定义,那么您所拥有的几乎没问题。问题是你在定义B类之前定义了A的成员函数,确保类B被完全定义(实际的类,而不是其成员函数的完整实现)在你实现 A 成员函数之前。

所以像这样:

class B;

class A { ...; void member_function(B*); ... };

class B { ...; void other_member_function(); ... };

void A::member_function(B* b) { ...; b->other_member_function(); ... }

关于C++03 调用成员函数时解析圆圈组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27130919/

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