我正在使用的库具有类G和继承G的类S。
我需要为它们添加功能,所以我包装了G和S,而是从它们的继承中分别制造了Gnew和Snew。
所以,我的继承是:
G --> Gnew | v S --> Snew
But, I want to use Gnew in Snew and when I try to include the Gnew header (in the Snew implementation file) to use it ... the include guards mask the definition of Gnew in Snew???
How can I use Gnew in Snew? Right now, the compiler wont even let me forward declare Gnew in the Snew definition file (which doesn't make sense to me) unless I forward declare inside the class.
In Snew (if I forward declare before the Snew definition) I have:
...
Gnew *g;
错误是:
error: ISO C++ forbids declaration of ‘Gnew’ with no type
如果我将Snew更改为:
...
class Gnew *g;
Gnew *g;
错误是:
error: invalid use of undefined type ‘struct Snew::Gnew’
注意:
我正在尝试抽象问题,因此我将其关闭并重新打开该问题的更好措词...
最佳答案
周期在哪里?为什么Gnew会包含Snew的 header ?
[编辑]
好的,我认为您的继承箭头与习惯相反。但这应该使您理清:
在Gnew.h中:
#pragma once
#if !defined(Gnew_h)
#define Gnew_h
#include "G.h"
class Gnew : public virtual G
{
// added functionality here.
};
#endif // Gnew_h
在Snew.h中:
#pragma once
#if !defined(Snew_h)
#define Snew_h
#include "S.h"
#include "Gnew.h"
class Snew : public virtual Gnew, public virtual S
{
// added functionality here.
};
#endif // Snew_h
您不必转发任何声明。
但是请注意,这仅在S继承自G的情况下才可以按预期工作。如果所有这些多重继承问题都太麻烦了,则可能应该改编库类而不是从它们继承。
这有帮助吗?