Saltar al contenido

c ++ “Tipo incompleto no permitido” error al acceder a la información de referencia de clase (dependencia circular con declaración directa)

Este post fue probado por nuestros expertos para garantizar la veracidad de este tutorial.

Solución:

Si coloca sus definiciones en este orden, el código se compilará

class Ball;

class Player 
public:
    void doSomething(Ball& ball);
private:
;

class Ball 
public:
    Player& PlayerB;
    float ballPosX = 800;
private:

;

void Player::doSomething(Ball& ball) 
    ball.ballPosX += 10;                   // incomplete type error occurs here.


int main()


La definición de la función doSomething requiere la definición completa de la clase Ball porque accede a su miembro de datos.

En su módulo de ejemplo de código, Player.cpp no ​​tiene acceso a la definición de la clase Ball, por lo que el compilador emite un error.

Player.cpp requieren la definición de Ball clase. Así que simplemente agregue #include "Ball.h"

Jugador.cpp:

#include "Player.h"
#include "Ball.h"

void Player::doSomething(Ball& ball) 
    ball.ballPosX += 10;                   // incomplete type error occurs here.

Esto es lo que tenía y lo que causó mi “error de tipo incompleto”:

#include "X.h" // another already declared class
class Big ... // full declaration of class A

class Small : Big 
    Small() 
    Small(X); // line 6

//.... all other stuff

Lo que hice en el archivo “Big.cpp”, donde declaré el constructor de A2 con X como parámetro es…

Grande.cpp

Small::Big(X my_x)  // line 9 <--- LOOK at this !

Escribí "Pequeño::Grande" en lugar de "Pequeño::Pequeño"qué error tan tonto ... Recibí el error "ahora se permite el tipo incompleto" para la clase X todo el tiempo (en las líneas 6 y 9), lo que generó una confusión total ...

De todos modos, ahí es donde puede ocurrir un error, y la razón principal es que estaba cansado cuando lo escribí y necesité 2 horas explorando y reescribiendo el código para revelarlo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *