He decidio plantear esta duda en el foro español porque con lo extraña que es, como me la expliquen en ingles creo que no me voy a enterar. Intentaré resumir lo que me pasa pero creo que la gente va a tener que exprimirse las neuronas porque realmente es un problema muy curioso.
Resulta que tengo una clase base A(archivo AAA.h) en la cual derivan dos clases derivadas B (archivo BBB.h) y C (archivo CCC.h). Por lo tanto:
ARCHIVO AAA.h
Class myclassA {
...................
};
ARCHIVO BBB.h
#include "AAA.h"
Class myclassB:public myclassA{
public:
bool funcionB();
..................
};
ARCHIVO CCC.h
#include "AAA.h"
Class myclassC:public myclassA{
public:
bool funcionC();
...................
};
ARCHIVO MAIN.cpp
#include "BBB.h"
#include "CCC.h"
INT WINAPI WinMain(...................){
.......................
B* objetoB = new B();
....................
C* objetoC = new C();
...........................
}
Mas o menos entendido todo??? Bien pues cuando compilo me sale el error:
c:\prueba1\AAA.h(11) : error C2011: 'VariablesFuente' : 'class' type redefinition
c:\prueba1\AAA.h(11) : see declaration of 'VariablesFuente'
c:\prueba1\BBB.h(11) : error C2504: 'VariablesFuente' : base class undefined
c:\prueba1\BBB.h(11) : error C2504: 'VariablesFuente' : base class undefined
Bueno, investigué como podía solucionar esto y descubrí que C++ permite multiples declaraciones pero solo una definición, por lo tanto me puse manos a la obra aplicando #ifndef, #define, ..... Y el programa me queda como esto:
ARCHIVO AAA.h
#ifndef AAA_h
#define AAA_h
Class myclassA {
...................
};
#endif
ARCHIVO BBB.h
#ifndef BBB_h
#define BBB_h
#include "AAA.h"
Class myclassB:public myclassA{
public:
bool funcionB();
..................
};
#endif
ARCHIVO CCC.h
#ifndef CCC_h
#define CCC_h
#include "AAA.h"
Class myclassC:public myclassA{
public:
bool funcionC();
...................
};
ARCHIVO MAIN.cpp
#ifndef AAA_h
#define AAA_h
class myclassA{};
#endif
#ifndef BBB_h
#define BBB_h
#ifndef AAA_h
#define AAA_h
class myclassA{};
#endif
class myclassB : myclassA{};
#endif
//#ifndef AAA_h
//#define AAA_h
//class myclassA{};
//#endif
#ifndef CCC_h
#define CCC_h
#ifndef AAA_h
#define AAA_h
class myclassA{};
#endif
class myclassC : myclassA{};
#endif
#include "BBB.h"
#include "CCC.h"
INT WINAPI WinMain(...................){
.......................
B* objetoB = new B();
....................
C* objetoC = new C();
...........................
}
Bien, pues despues de este coñazo que os he dado, voy y compilo y me sale estos errores :
c:\prueba1\main.cpp(281) : error C2039: 'funcionB' : is not a member of 'myclassB'
c:\prueba1\main.cpp(27) : see declaration of 'myclassB'
c:\prueba1\main.cpp(285) : error C2039: 'funcionC' : is not a member of 'myclassC'
c:\prueba1\main.cpp(29) : see declaration of 'myclassC'
JA!, ¿como se te queda el cuerpo???
Por favor, necesito saber que he hecho mal o si teneis una manera más sencilla de resolverlo.
Muchas gracias de antemano.
Resulta que tengo una clase base A(archivo AAA.h) en la cual derivan dos clases derivadas B (archivo BBB.h) y C (archivo CCC.h). Por lo tanto:
ARCHIVO AAA.h
Class myclassA {
...................
};
ARCHIVO BBB.h
#include "AAA.h"
Class myclassB:public myclassA{
public:
bool funcionB();
..................
};
ARCHIVO CCC.h
#include "AAA.h"
Class myclassC:public myclassA{
public:
bool funcionC();
...................
};
ARCHIVO MAIN.cpp
#include "BBB.h"
#include "CCC.h"
INT WINAPI WinMain(...................){
.......................
B* objetoB = new B();
....................
C* objetoC = new C();
...........................
}
Mas o menos entendido todo??? Bien pues cuando compilo me sale el error:
c:\prueba1\AAA.h(11) : error C2011: 'VariablesFuente' : 'class' type redefinition
c:\prueba1\AAA.h(11) : see declaration of 'VariablesFuente'
c:\prueba1\BBB.h(11) : error C2504: 'VariablesFuente' : base class undefined
c:\prueba1\BBB.h(11) : error C2504: 'VariablesFuente' : base class undefined
Bueno, investigué como podía solucionar esto y descubrí que C++ permite multiples declaraciones pero solo una definición, por lo tanto me puse manos a la obra aplicando #ifndef, #define, ..... Y el programa me queda como esto:
ARCHIVO AAA.h
#ifndef AAA_h
#define AAA_h
Class myclassA {
...................
};
#endif
ARCHIVO BBB.h
#ifndef BBB_h
#define BBB_h
#include "AAA.h"
Class myclassB:public myclassA{
public:
bool funcionB();
..................
};
#endif
ARCHIVO CCC.h
#ifndef CCC_h
#define CCC_h
#include "AAA.h"
Class myclassC:public myclassA{
public:
bool funcionC();
...................
};
ARCHIVO MAIN.cpp
#ifndef AAA_h
#define AAA_h
class myclassA{};
#endif
#ifndef BBB_h
#define BBB_h
#ifndef AAA_h
#define AAA_h
class myclassA{};
#endif
class myclassB : myclassA{};
#endif
//#ifndef AAA_h
//#define AAA_h
//class myclassA{};
//#endif
#ifndef CCC_h
#define CCC_h
#ifndef AAA_h
#define AAA_h
class myclassA{};
#endif
class myclassC : myclassA{};
#endif
#include "BBB.h"
#include "CCC.h"
INT WINAPI WinMain(...................){
.......................
B* objetoB = new B();
....................
C* objetoC = new C();
...........................
}
Bien, pues despues de este coñazo que os he dado, voy y compilo y me sale estos errores :
c:\prueba1\main.cpp(281) : error C2039: 'funcionB' : is not a member of 'myclassB'
c:\prueba1\main.cpp(27) : see declaration of 'myclassB'
c:\prueba1\main.cpp(285) : error C2039: 'funcionC' : is not a member of 'myclassC'
c:\prueba1\main.cpp(29) : see declaration of 'myclassC'
JA!, ¿como se te queda el cuerpo???
Por favor, necesito saber que he hecho mal o si teneis una manera más sencilla de resolverlo.
Muchas gracias de antemano.