#include confusión

Para evitar un círculo de inclusión, reemplacé un #include que estaba previamente en un encabezado de clases en su archivo cpp. Luego coloqué una declaración hacia adelante en el encabezado.

Esto resolvió mi problema, sin embargo, el archivo fuente ya no parece poder acceder a los miembros del archivo incluido en el archivo cpp. ¿Por qué es esto? ¿y cual es la solución?

EDITAR - código real a continuación:

encabezamiento:

#ifndef BULLET_H
#define BULLET_H

#include "BoundingSphere.h"
#include "helperMethods.h"

class GameObject;

class Bullet : public GameObject
{
private:
float velocity;
float distance;
D3DXVECTOR3 firedFrom;
BoundingSphere bSphere;

public:
Bullet(D3DXVECTOR3 position, D3DXVECTOR3 rotation, float velocity, D3DXCOLOR     colour);
BoundingSphere BulletSphere();//change this to simply use position
void Update();
};

#endif

fuente:

#include "Bullet.h"
#include "GameObject.h"

Bullet::Bullet(D3DXVECTOR3 position, D3DXVECTOR3 rotation, float velocity, D3DXCOLOR colour) 
: bSphere(BoundingSphere(position, 0.01f))
{
//Model = content.Load<Model>("Models\\basicMesh");
//Texture = content.Load<Texture2D>("Textures\\basicMesh");

distance = 0.0f;

Scale(D3DXVECTOR3(0.25f, 0.1f, 0.1f));// error

Colour(colour); //error

firedFrom = position;

Rotation() = rotation; // error
this->velocity = velocity;
}

BoundingSphere Bullet::BulletSphere()
{
return bSphere;
}

void Bullet::Update()
{
Position(D3DXVECTOR3Helper.PointOnXYCircle(firedFrom, distance, Rotation().z)); //error
bSphere.Centre(Position());
distance += velocity;
}

El primer error es GameObject: clase base indefinida.

todos los errores posteriores son "Error: Identificador" lo que sea "indefinido. Todos son captadores que son públicos y están en el objeto del juego.

preguntado el 08 de noviembre de 11 a las 12:11

3 Respuestas

Debe recibir un error del compilador de antemano, la declaración hacia adelante no le permite heredar de una clase. Publique su código.

La siguiente línea:

class Bullet : public GameObject

significa que tienes que incluir GameObject.h in Bullet.h. Una vez más, una declaración a plazo no es suficiente para la herencia. Si recibe más errores, publique el código de error exacto, el texto y el número de línea (después de realizar los cambios).

respondido 08 nov., 11:17

Los constructores no necesitan tipos de retorno. Pero sí, el código publicado no se compila. - themel

@themel correcto, es solo que foo generalmente se usa para el nombre de una función. Mi error :) - Luchian Grigore

@LuchianGrigore sí, gracias. ¡Tenía muchos círculos de inclusión en todas partes! - Dollarslice

El punto y coma en la línea que define la clase foo es superfluo:

class foo : public blah;

debe leer

class foo : public blah

respondido 08 nov., 11:16

class blah; 

class foo : public blah // <- extra ; here
{ 
    public foo(); 
}; 

¿Qué quieres decir con "solía trabajar pero ahora no"? ¿Qué mensaje de error recibe?

respondido 08 nov., 11:16

el identificador x no está definido. En el caso de Scale () Color (), etc., que son locales para gameobject - Dollarslice

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.