Ситуация такая: пишу динамическую библиотеку. Нужно чтобы в конечном итоге получилось 2 файла (сама библиотека и заголовочный файл с объявлением функций).
Заголовочный файл:
#ifndef HEADER_H
#define HEADER_H
#ifdef WIN32
#include <windows.h>
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __attribute__((visibility("default")))
#endif
EXPORT Object *GetObject();
#endif // HEADER_H
Исходник:
#include "header.h"
#include "object.h"
#ifdef WIN32
BOOL WINAPI DllMain( HINSTANCE /*hinstDLL*/, DWORD /*fdwReason*/, LPVOID /*lpvReserved*/ )
{
return TRUE;
}
#endif
Object *GetObject()
{
return pObject.GetObject();
}
object.h
class Object
{
public:
Object();
Object *GetObject();
};
extern Object pObject;
object.cpp
Object::Object
{
}
Object *Object::GetObject()
{
Object *obj = new Object();
return obj;
}
Object pObject;
Вопрос такой: можно как-нибудь в файле header.h указать тип Object без включения в него object.h? Не хотелось бы таскать вместе с библиотекой эти файлы.
Если в header.h прописать class Object, то при вызове в программе, к которой линкуется данная библиотека, выходит ошибка forward declaration и uninizialized struct Object.