访问组合类 c++ 的成员



>我有以下代码,有一个由"眉毛"类组成的"Face"类。人脸的表情可以更改为允许的公共枚举之一,从而控制如何更改其每个组成部分。每个组成类都应该负责响应更改的表达式,这就是为什么我想将其传递给每个组成部分。

脸:

#include "eyebrow.h"
class Face {
    public:
        enum Expression {NEUTRAL, JOY, ANGER};
        void setExpression(Expression);
    private:
         Eyebrow left_eyebrow;
}

面部.cpp:

#include "face.h"
#include "eyebrow.h"
void Face::setExpression(Expression e) {
     left_eyebrow.setExpression(e);
}

眉毛:

#include "face.h"
class Eyebrow {
    public:
         void setExpression(Face::Expression);
};

代码正在使用 Cmake 编译:

add_executable(Main main.cpp face.cpp eyebrow.cpp)

我收到以下编译器错误:"Face"尚未在 eyebrow.h 中的 void setExpression(Face::Expression_e( 中声明。

然后我转发声明了 Face(见下文(,并得到编译器错误:"Face::Expression"尚未在 void setExpression(Face::Expression( 中声明;

眉毛.h(带有前向声明(:

#include "face.h"
class Face;
class Eyebrow {
    public:
         void setExpression(Face::Expression);
};

解决这个问题的推荐方法是什么,应该使用朋友吗?

您已经创建了一个循环依赖项:

face.h 包括 eyebrow.h,eyebrow.h 包括 face.h,所以它们相互包含。必须解析循环依赖项。

您可以从 Face 中删除枚举并将其放在自己的头文件中,然后两个文件都可以包含该文件。

或者,您可以在"脸"中存储指向"眉毛"的指针,而不是"眉毛"本身。然后,您可以删除face.h中的eyebrow.h,并转发声明眉毛。然后可以在 Face 的构造函数中初始化指针。

相关内容

  • 没有找到相关文章

最新更新