2011-11-08 70 views
2

爲了避免包含圓圈,我已將之前在類頭中的#include替換爲它的cpp文件。然後,我將一個前向聲明放入標題中。#include confusion

這解決了我的問題,但是,源文件似乎不再能夠訪問cpp文件中包含的文件的成員。爲什麼是這樣?什麼是解決方案?

編輯 - 下面真實代碼:

頭:

#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 

源:

#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; 
} 

第一個錯誤是遊戲物體:基類未定義。

所有後續的錯誤是「錯誤:標識符‘無所謂’是不確定他們是公衆和遊戲對象的所有干將

回答

6

您必須預先得到一個編譯器錯誤,向前聲明不允許你這樣做。從一個類繼承請發表您的代碼

以下行:。

class Bullet : public GameObject 

意味着你必須包括Bullet.hGameObject.h再次,向前聲明不是蘇不適合繼承。如果您收到更多錯誤,請發佈確切的錯誤代碼,文本和行號(進行更改後)。

+1

構造函數不需要返回類型。但是,發佈的代碼不能編譯。 – themel

+0

@themel正確,只是foo通常用於函數名。我的壞:) –

+0

我改變了問題,所以它現在有實際的代碼 – SirYakalot

0

定義類Foo行分號是多餘的:

class foo : public blah; 

必須閱讀

class foo : public blah 
0
class blah; 

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

什麼你的意思做 「用來工作,但現在已經不」?你收到哪條錯誤消息?

+0

標識符x未定義。在Scale()Color()等情況下,它們是gameobject本地的 – SirYakalot