[英]Access member of composition class c++
我有以下代碼,有一個'Face'類,它由一個'Eyebrow'類組成。 可以將表情更改為允許的公共枚舉之一,從而控制應如何更改每個表情的組成部分。 每個構成類都應負責響應更改后的表達式,這就是為什么我想將其傳遞給每個構成類。
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)
我收到以下編譯器錯誤:eyebrow.h中的void setExpression(Face :: Expression_e)中未聲明“ Face”。
然后,我轉發聲明的Face(請參見下文),並得到編譯器錯誤:尚未在void setExpression(Face :: Expression)中聲明'Face :: Expression'; 在眉毛中
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包含,並改為向前聲明Eyebrow。 然后可以在Face的構造函數中初始化指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.