【发布时间】:2016-12-06 09:05:21
【问题描述】:
实用程序.h
#ifndef _UTILITIES_
#define _UTILITIES_
#include "MyFirstCairoPlugin.h"
class PLUG_CLASS_NAME;
class Utilities
{
private:
PLUG_CLASS_NAME *pPlug;
public:
Utilities(PLUG_CLASS_NAME *plug);
~Utilities();
};
#endif // !_UTILITIES_
实用程序.cpp
#include "Utilities.h"
Utilities::Utilities(PLUG_CLASS_NAME *plug) : pPlug(plug) {
IColor color = IColor(100, 100, 100, 255);
}
Utilities::~Utilities() {
}
这就是我遇到麻烦的地方,使用来自MyFirstCairoPlugin.h的这个类:
#ifndef _MYFIRSTCAIROPLUGIN_
#define _MYFIRSTCAIROPLUGIN_
#include "IPlug_include_in_plug_hdr.h"
#include "resource.h"
#include "Utilities.h"
//class Utilities;
class MyFirstCairoPlugin : public IPlug
{
private:
public:
Utilities *pUtilities;
MyFirstCairoPlugin(IPlugInstanceInfo instanceInfo);
~MyFirstCairoPlugin();
};
#endif // !_MYFIRSTCAIROPLUGIN_
如果我不取消注释//class Utilities;(前向声明),它就不能使用实用程序(即使我已经在上面包含了它,#include "Utilities.h")。它给了我“典型的”循环依赖错误`:
syntax error: missing ';' before '*' (compiling source file ..\..\..\IPlug_AddOns\Utilities.cpp)
我哪里错了?
【问题讨论】:
-
为什么
utilities.h需要#include "MyFirstCairoPlugin.h"? -
因为
PLUG_CLASS_NAME是一个宏,并且“定义”了MyFirstCairoPlugin类的名字,在MyFirstCairoPlugin.h里面 -
MyFirstCairoPlugin.h不需要包含utilities.h如果你转发声明Utilities。 -
你已经消除了类之间的循环依赖,但是你仍然有头之间的循环依赖。
-
@paizza 由于 molbdnilo 在上述评论中所说的话。这就是你打破依赖的方式。
标签: c++ circular-dependency forward-declaration