我有一个关于通告声明的问题,但是到目前为止,所有的解决方案都没有直接解决这个问题。
以下是一些代码:
Transformable.h
#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);Transforms.h
#pragma once
#include "Transformable.h"
#include "TransformMatrix.h"A.h
class A: public Transformable {
public:
A();
/* We want a callback */
TransformMatrix Transform = TransformMatrix(this);我有一个实现基类的类,并且使用一个特殊的头,这样我就不必每次都包含两个文件。但我得到的错误是:
H(7):错误C3646:'Transform':未知覆盖 H(7):错误C4430:缺少类型说明符- int假设。注意: C++不支持默认-int。
发布于 2017-11-01 05:18:07
假设TransformMatrix.h可以将Transformable视为不透明类型,那么您可以简单地使用现有的前向声明,并从TransformMatrix.h中删除#include 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中的typedef使用Transformable实现模板。
#pragma once
#include "Transformable.h"
#include "TransformMatrix.h"
typedef TransformMatrixTemplate<Transformable> TransformMatrix;https://stackoverflow.com/questions/47048454
复制相似问题