Olá, Eduardo
Parece que você está tendo um problema com a declaração forward e a herança em C++. Vamos tentar resolver isso juntos.
Primeiramente, é importante entender que a declaração forward é uma técnica usada para evitar dependências circulares entre arquivos de cabeçalho. No entanto, ela não é suficiente para habilitar a herança. Isso ocorre porque, para uma classe derivar de outra, o compilador precisa conhecer a definição completa da classe base, não apenas sua declaração.
No seu caso, você mencionou que está tentando herdar de cServer
em cMain
, cGlobal
e cFileDB
, mas está recebendo um erro de "classe base indefinida". Isso sugere que o compilador não tem a definição completa da classe cServer
no momento em que está tentando compilar as classes derivadas.
A solução para o seu problema seria incluir o arquivo de cabeçalho cServer.h
em cada um dos arquivos de cabeçalho das classes derivadas (cMain.h
, cGlobal.h
, cFileDB.h
). Isso garantirá que o compilador tenha a definição completa da classe cServer
quando estiver compilando as classes derivadas.
Aqui está um exemplo de como você pode fazer isso:
// cMain.h
#include "cServer.h"
class cMain : public cServer {
// ...
};
// cGlobal.h
#include "cServer.h"
class cGlobal : public cServer {
// ...
};
// cFileDB.h
#include "cServer.h"
class cFileDB : public cServer {
// ...
};
Se você está preocupado em incluir o arquivo cServer.h
em muitos lugares, uma prática comum é usar diretivas de pré-processador para garantir que o arquivo de cabeçalho seja incluído apenas uma vez.
// cServer.h
#ifndef CSERVER_H
#define CSERVER_H
class cServer {
// ...
};
#endif
Espero que isso resolva o seu problema. Lembre-se, a declaração forward é uma ferramenta útil para evitar dependências circulares, mas não é suficiente para permitir a herança. Para a herança, o compilador precisa da definição completa da classe base.
Espero ter ajudado e bons estudos!