[英]C++ Circular Declaration Issues
我在使用循環聲明時遇到問題,但是到目前為止,找到的所有解決方案都不能直接解決問題。
這是一些代碼:
可變形的
#pragma once
#include "TransformMatrix.h"
class Transformable {
public:
TransformMatrix Transform;
virtual void transform_callback();
};
TransformMatrix.h
#pragma once
#include "Transformable.h"
class Transformable;
class TransformMatrix {
private:
Transformable *callback_object;
public:
TransformMatrix();
TransformMatrix(Transformable *cb_object);
轉換
#pragma once
#include "Transformable.h"
#include "TransformMatrix.h"
啊
class A: public Transformable {
public:
A();
/* We want a callback */
TransformMatrix Transform = TransformMatrix(this);
我有一個實現基類的類,並使用特殊的頭,因此我不必每次都包含兩個文件。 但是我得到的錯誤是:
Transformable.h(7):錯誤C3646:“ Transform”:未知覆蓋
Transformable.h(7):錯誤C4430:缺少類型說明符-假定為int。 注意:C ++不支持default-int。
假定TransformMatrix.h可以將Transformable
視為不透明類型,則可以簡單地使用現有的前向聲明,並從TransformMatrix.h中刪除#include Transformable.h
Transformable.h 。 然后, TransformMatrix
的實現文件可能需要添加#include Transformable.h
。 (這是從您的問題下方的評論中收集的。)
但是,可能需要這種知識。 然后,我們認為您的類依賴項中存在設計缺陷,因此我們嘗試對其進行糾正。
我們注意到Transformable
有一個虛擬方法,但還想包含一個TransformMatrix
。 可能,我們可以通過刪除此依賴項來糾正您的問題。 在這一點上,由於您沒有顯示足夠的代碼以完全理解您的預期設計,所以這是猜測。
但是,如果我試圖盡可能地保持現有的設計,我會轉換TransformMatrix
為模板,抽象掉Transformable
成一個模板參數。
#pragma once
template <typename T>
class TransformMatrixTemplate {
private:
T *callback_object;
public:
TransformMatrixTemplate();
TransformMatrixTemplate(T *cb_object);
然后,在Transforms.h中使用Transformable
typedef
模板。
#pragma once
#include "Transformable.h"
#include "TransformMatrix.h"
typedef TransformMatrixTemplate<Transformable> TransformMatrix;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.