Utilities.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_
Utilities.cpp
#include "Utilities.h"
Utilities::Utilities(PLUG_CLASS_NAME *plug) : pPlug(plug) {
IColor color = IColor(100, 100, 100, 255);
}
Utilities::~Utilities() {
}
И здесь я имею проблемы, используя этот Classe из 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' – markzzz
' MyFirstCairoPlugin.h', не нужно включать 'utilities.h', если вы отправляете объявление' Утилиты ' '. – Arunmu