msr Posted May 29, 2012 at 05:22 PM Report #458973 Posted May 29, 2012 at 05:22 PM (edited) Olá, Num ficheiro "Base.h" pretendo declarar um namespace que inclui várias classes. Algo deste género: #ifndef BASE_H #define BASE_H #define BASE_BEGIN_NAMESPACE namespace Base { #define BASE_END_NAMESPACE } namespace Base { class Core; }; #endif // BASE_H Por outro lado, pretendo implementar cada uma das classes deste namespace em ficheiros externos, neste caso core.cpp/core.h. Estou a fazer o seguinte: #ifndef CORE_H #define CORE_H BASE_BEGIN_NAMESPACE class Core { public: Core(); ~Core(); protected: private: }; BASE_END_NAMESPACE #endif // CORE_H #include "core.h" BASE_BEGIN_NAMESPACE Core::Core() { //ctor cout << "core instance created" << endl; } Core::~Core() { //dtor cout << "core instance deleted" << endl; } BASE_END_NAMESPACE No ficheiro main.cpp tenho então o seguinte: #include <iostream> using namespace std; #include "base.h" using namespace Base; int main() { Core *core = new Core(); cout << "Hello World" << endl; return 0; } No entanto obtenho o seguinte erro: ...\main.cpp:9: error: invalid use of incomplete type 'struct Base::Core' ...\base.h:9: error: forward declaration of 'struct Base::Core' Já andei às voltas com isto mas não consigo perceber a forma correcta de implementar. Alguma sugestão? Muito obrigado Edited May 29, 2012 at 05:23 PM by msr COMPONENT ORGANIZER easily organize your electronic parts and application notes
HappyHippyHippo Posted May 29, 2012 at 05:27 PM Report #458974 Posted May 29, 2012 at 05:27 PM o ficheiro core.h não sabe as definições BASE_BEGIN_NAMESPACE porque não faz include do ficheiro base.h se queres usar esse tipo de definições tenta centralizar num ficheiro tipo def.h depois é so fazer include em cada um ... desse modo evitas este tipo de problemas IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now