访问组合 class c++ 的成员
Access member of composition class c++
我有下面的代码,有一个'Face' class,它由一个'Eyebrow' class组成。面部表情可以更改为允许的 public 枚举之一,从而控制每个组成部分的更改方式。每个组成部分 classes 都应负责响应更改后的表达式,这就是为什么我想将其传递给每个组成部分。
face.h:
#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);
}
eyebrow.h:
#include "face.h"
class Eyebrow {
public:
void setExpression(Face::Expression);
};
正在使用 Cmake 编译代码:
add_executable(Main main.cpp face.cpp eyebrow.cpp)
我收到以下编译器错误:‘Face’ has not been declared in void setExpression(Face::Expression_e) in eyebrow.h.
然后我向前声明了 Face(见下文)并得到了编译器错误:'Face::Expression' has not been declared in void setExpression(Face::Expression);在 eyebrow.h
eyebrow.h(前向声明):
#include "face.h"
class Face;
class Eyebrow {
public:
void setExpression(Face::Expression);
};
推荐的解决方法是什么,有没有朋友用过?
您已经创建了一个循环依赖:
face.h 包含 eyebrow.h,eyebrow.h 包含 face.h,因此它们相互包含。您必须解决循环依赖。
您可以从 Face 中删除枚举并将其放入自己的头文件中,然后两个文件都可以包含该头文件。
或者,您可以在 Face 中存储一个指向 Eyebrow 的指针,而不是 Eyebrow 本身。然后,您可以删除 face.h 中的 eyebrow.h 和 forward-declare 眉毛。然后可以在Face的构造函数中初始化指针。
我有下面的代码,有一个'Face' class,它由一个'Eyebrow' class组成。面部表情可以更改为允许的 public 枚举之一,从而控制每个组成部分的更改方式。每个组成部分 classes 都应负责响应更改后的表达式,这就是为什么我想将其传递给每个组成部分。
face.h:
#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);
}
eyebrow.h:
#include "face.h"
class Eyebrow {
public:
void setExpression(Face::Expression);
};
正在使用 Cmake 编译代码:
add_executable(Main main.cpp face.cpp eyebrow.cpp)
我收到以下编译器错误:‘Face’ has not been declared in void setExpression(Face::Expression_e) in eyebrow.h.
然后我向前声明了 Face(见下文)并得到了编译器错误:'Face::Expression' has not been declared in void setExpression(Face::Expression);在 eyebrow.h
eyebrow.h(前向声明):
#include "face.h"
class Face;
class Eyebrow {
public:
void setExpression(Face::Expression);
};
推荐的解决方法是什么,有没有朋友用过?
您已经创建了一个循环依赖:
face.h 包含 eyebrow.h,eyebrow.h 包含 face.h,因此它们相互包含。您必须解决循环依赖。
您可以从 Face 中删除枚举并将其放入自己的头文件中,然后两个文件都可以包含该头文件。
或者,您可以在 Face 中存储一个指向 Eyebrow 的指针,而不是 Eyebrow 本身。然后,您可以删除 face.h 中的 eyebrow.h 和 forward-declare 眉毛。然后可以在Face的构造函数中初始化指针。