C++ 如何在具有循环依赖关系的类中动态转换?
我想动态强制转换一个类: A.h: B.h: 编译时,会出现以下错误: “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 我的问题解决了。 解决方案是将头文件和实现文
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