C++ 如何在具有循环依赖关系的类中动态转换?

C++ 如何在具有循环依赖关系的类中动态转换?,c++,circular-dependency,dynamic-cast,C++,Circular Dependency,Dynamic Cast,我想动态强制转换一个类: A.h: B.h: 编译时,会出现以下错误: “C”:未声明的标识符 我认为这是因为类B和C之间存在循环依赖关系。 我怎样才能解决这个问题 A.h A.cpp 如果使用的是gcc,请使用以下命令编译和执行: g++ -std=c++17 -I. -o main A.cpp main.cpp \ && ./main 运行程序后,您将从提示符处获得以下输出: c->x = 2 b->x = 1 我的问题解决了。 解决方案是将头文件和实现文

我想动态强制转换一个类:

A.h:

B.h:

编译时,会出现以下错误:

“C”:未声明的标识符

我认为这是因为类
B
C
之间存在循环依赖关系。 我怎样才能解决这个问题

A.h

A.cpp

如果使用的是
gcc
,请使用以下命令编译和执行:

g++ -std=c++17 -I. -o main A.cpp main.cpp \
  && ./main
运行程序后,您将从提示符处获得以下输出:

c->x = 2
b->x = 1
我的问题解决了。
解决方案是将头文件和实现文件.cpp分离,并在.cpp文件中包含所有.h文件

tnx,我想在A的另一个子文件中调用A的子文件的函数。(不是继承的函数,而是特定于每个子文件的其他函数)@mahdi.Lotfi为什么需要在类
C
的函数中将
a*
的指针转换为
B*
?感谢您的回复。我想在不同的.h文件中实现类A、B和C。
class C
    : public A
{
public:
    void foo(A *a)
    {
        B* b = dynamic_cast<B*>(a);
    }
};
#include "A.h"
#include "B.h"
#include "C.h"

int main()
{
}
#ifndef _A_H
#define _A_H

class A
{
public:
    int x{ 0 };

    A() {}
    virtual ~A() {}
};

// definition
class B
    : public A
{
public:
    B() {}
    ~B() override {}

    void foo(A* a);
};

// definition
class C
    : public A
{
public:
    C() {}
    ~C() override {}

    void foo(A* a);
};

#endif _A_H
#include "A.h" // NECESSARY !
#include <iostream>

void
B::
foo(A* a)
{
    C* c = dynamic_cast<C*>(a);
    if (c)
    {
        std::cout <<
            "c->x = "
            << c->x
            << std::endl;
    }
}

void
C::
foo(A* a)
{
    B* b = dynamic_cast<B*>(a);
    if (b)
    {
        std::cout <<
            "b->x = "
            << b->x
            << std::endl;
    }
}
#include "A.h"

int main()
{
    B b;
    b.x = 1;
    C c;
    c.x = 2;

    b.foo(&c);
    c.foo(&b);

    return 0;
}
g++ -std=c++17 -I. -o main A.cpp main.cpp \
  && ./main
c->x = 2
b->x = 1