C++ 组合类c+的访问成员+;
我有下面的代码,有一个由“眉毛”类组成的“脸”类。可以将面的表达式更改为允许的公共枚举之一,从而控制如何更改其每个组成部分。每个组成类都应该负责响应一个已更改的表达式,这就是为什么我要将它传递给每个组成类 面h:C++ 组合类c+的访问成员+;,c++,forward-declaration,object-composition,C++,Forward Declaration,Object Composition,我有下面的代码,有一个由“眉毛”类组成的“脸”类。可以将面的表达式更改为允许的公共枚举之一,从而控制如何更改其每个组成部分。每个组成类都应该负责响应一个已更改的表达式,这就是为什么我要将它传递给每个组成类 面h: #include "eyebrow.h" class Face { public: enum Expression {NEUTRAL, JOY, ANGER}; void setExpression(Expression); privat
#include "eyebrow.h"
class Face {
public:
enum Expression {NEUTRAL, JOY, ANGER};
void setExpression(Expression);
private:
Eyebrow left_eyebrow;
}
face.cpp:
#include "face.h"
#include "eyebrow.h"
void Face::setExpression(Expression e) {
left_eyebrow.setExpression(e);
}
眉毛h:
#include "face.h"
class Eyebrow {
public:
void setExpression(Face::Expression);
};
正在使用Cmake编译代码:
add_executable(Main main.cpp face.cpp eyebrow.cpp)
我得到了以下编译器错误:“Face”没有在void setExpression(Face::Expression_e)中声明在眉毛.h中
然后我转发声明的面(见下文),并得到编译器错误:“Face::Expression”未在void setExpression(Face::Expression)中声明;在眉毛上
眉毛h(带向前声明):
如果使用朋友,建议采用什么方法解决此问题?您已经创建了一个循环依赖项: 脸。h包括眉毛。h和眉毛。h包括脸。h,所以他们互相包括。必须解决循环依赖关系 您可以从Face中删除枚举并将其放入自己的头文件中,然后这两个文件都可以包含头文件
或者,您可以在脸上存储指向眉毛的指针,而不是眉毛本身。然后,您可以删除面.h中眉毛.h的包含,并改为向前声明眉毛。然后可以在Face的构造函数中初始化指针。您已经创建了一个循环依赖项: 脸。h包括眉毛。h和眉毛。h包括脸。h,所以他们互相包括。必须解决循环依赖关系 您可以从Face中删除枚举并将其放入自己的头文件中,然后这两个文件都可以包含头文件
或者,您可以在脸上存储指向眉毛的指针,而不是眉毛本身。然后,您可以删除面.h中眉毛.h的包含,并改为向前声明眉毛。指针可以在Face的构造函数中初始化。我选择了第二个选项,因为我想在逻辑上保持Face类中包含的Face表达式。现在正在编译,我会把你的答案标记为已接受。谢谢。我选择了第二个选项,因为我想在逻辑上保留face类中包含的face表达式。现在正在编译,我会把你的答案标记为已接受。谢谢
#include "face.h"
class Face;
class Eyebrow {
public:
void setExpression(Face::Expression);
};