And*_*agh 0 c++ forward-declaration object-composition
我有以下代码,有一个由“Eyebrow”类组成的“Face”类。面部表情可以更改为允许的公共枚举之一,从而控制应如何更改每个组成部分。每个组成类都应该负责响应更改后的表达式,这就是我想将其传递给每个组成部分的原因。
脸.h:
#include "eyebrow.h"
class Face {
public:
enum Expression {NEUTRAL, JOY, ANGER};
void setExpression(Expression);
private:
Eyebrow left_eyebrow;
}
Run Code Online (Sandbox Code Playgroud)
脸.cpp:
#include "face.h"
#include "eyebrow.h"
void Face::setExpression(Expression e) {
left_eyebrow.setExpression(e);
}
Run Code Online (Sandbox Code Playgroud)
眉毛.h:
#include "face.h"
class Eyebrow {
public:
void setExpression(Face::Expression);
};
Run Code Online (Sandbox Code Playgroud)
代码正在用 Cmake 编译:
add_executable(Main main.cpp face.cpp eyebrow.cpp)
Run Code Online (Sandbox Code Playgroud)
我收到以下编译器错误:'Face' 尚未在 eye.h 中的 void setExpression(Face::Expression_e) 中声明。
然后我转发声明的人脸(见下文)并得到编译器错误:'Face::Expression' has not been created in void setExpression(Face::Expression); 在眉毛.h
眉毛.h(带有前向声明):
#include "face.h"
class Face;
class Eyebrow {
public:
void setExpression(Face::Expression);
};
Run Code Online (Sandbox Code Playgroud)
有什么推荐的解决方法,朋友们应该用吗?
你已经创建了一个循环依赖:
face.h 包括embrow.h 和member.h 包括face.h,所以它们相互包含。您必须解决循环依赖。
您可以从 Face 中删除枚举并将其放入自己的头文件中,然后两个文件都可以包含该头文件。
或者,您可以在 Face 中存储一个指向 Eyebrow 的指针,而不是 Eyebrow 本身。然后,您可以删除 face.h 中的 eyebrow.h 的包含,并改为向前声明 Eyebrow。然后可以在 Face 的构造函数中初始化该指针。
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |