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.