es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema de declaración anticipada de clase.

Escribí una clase simple de puntero inteligente pero tengo problemas. El código <code>BPtr mBptr;</code> en la clase A funciona bien al compilar, pero falla en alguna otra clase con el error: “error C2027: uso de un tipo no definido”. Así que tengo que incluir B.h en el archivo de encabezado en lugar de utilizar una declaración adelantada. No tengo idea de qué está pasando. ¿Alguien sabe algo al respecto?
Escribí este código de la siguiente manera:

//Pointer.h
template<class t="">
class Pointer
{
public:
    Pointer(T* pObject = nullptr);
    ...
private:
    T* mPtr;
};

//Pointer.inl
template <class t="">
Pointer<t>::Pointer(T* pObject)
{
    mPtr = pObject;
    if (mPtr)
    {
        mPtr->IncreRef(); //IncreRef: función de clase T
    }
}
...

Y lo utilicé de esta manera:

“`cpp
//A.h
#include “Pointer.h”
class B;
typedef Pointer BPtr;

class A
{
public:
A();
~A();
private:
BPtr mBptr; //Esto podría causar el error del compilador c2027
};

//A.cpp
#include “A.h”
#include “B.h”

A::A()
{
}

A::~A()
{
}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error “error C2027: uso de un tipo no definido” indica que en la clase A, el compilador no reconoce el tipo BPtr porque aún no se ha visto la definición real de la clase B. Este problema ocurrió debido al uso de una declaración anticipada para la clase B en A.h.

    Para resolver este problema, la definición de la clase B debe incluirse en A.h en lugar de utilizar una declaración anticipada. Esto permitirá que el compilador reconozca el tipo BPtr en la clase A y evite el error C2027.

Comments are closed.