2013-03-01 76 views
0

所以我有一個任務需要我在Player對象和一個Object(一個cube/pyrmaid/sphere真的無所謂)之間發生衝突一個八叉樹用於我的碰撞計算。當玩家與對象發生衝突時,對象需要被刪除。我有一個功能,因爲這樣試圖讓一個對象在C++中碰撞並刪除另一個對象

void BinPart::ProcessCollisions(int &nbrTests, int &nbrCollisions){ 
    if(hasChildren()) 
    { 
     for(int i = 0; i <= 7; i++) 
     { 
     child[i]->ProcessCollisions(nbrTests, nbrCollisions); 
     } 
    } 
    int n = objects.size(); 

    if(n >= 2) 
    { 
     for(int i = 0; i < n - 1; i++) 
     { 
      for(int j = i + 1; j < n; j++) 
      { 
       nbrTests++; 
       if(player->collidesWith(objects[j])) 
       { 
        objects.erase(objects.begin() + j); 
       } 
       else 
       { 
        if(objects[i]->collidesWith(objects[j])) 
         { 
          nbrCollisions++; 
         } 
       } 
      } 
     } 
    } 
    if(n >= 1 && parent != NULL) 
    { 
     parent->ProcessBorderCollisions(this, nbrTests, nbrCollisions); 
    } 
} 

目前player->collidesWith(objects[j]);不起作用,因爲球員是「不確定」的頭文件binPart那裏有一個基類對象,其中正在作出的所有對象的向前聲明從。然而,Object *播放器在Game.h中,但我需要binPart才能訪問它。我問我的一位朋友在我的課程中,他有什麼和他幾乎相同的問題。如果需要更多信息,請告訴我。

+0

所以有BinPart.cpp'#包括「Game.h」'。 – aschepler 2013-03-01 20:49:24

+0

我通常不喜歡抱怨語法,但我不知道'... player是否是binPart的頭文件中的「undefined」,或者是binPart的頭文件中是否有前向聲明... ' – 2013-03-01 21:05:20

+0

對不起,在binPart.h頭文件中有類Object的前向聲明。玩家(在Game.h中定義爲Object * player)在binPart.cpp中是未定義的,但我的一個同學的東西的設置與我和他的作品一樣。 – Elssar 2013-03-01 21:08:47

回答

0

如果源文件使用頭文件中聲明的某些內容,請將該頭文件包含在源文件中,即使它也包含在另一個源文件中。使用包含警衛來確保您不會重新聲明任何內容。

+0

但是,如果我包含使用BinPart.h的Game.h,那麼肯定會導致所有問題的方式? – Elssar 2013-03-01 20:50:23

+0

@Elssar:.h文件和.cpp文件是分開的(除了.cpp文件始終包含其相應的.h文件)。確實,你想避免循環依賴,但它不一定是'binpart.cpp'的循環依賴,以包含'game.h',後者又包含'binpart.h'。只要確保'binpart.h'不包含'game.h'。 – 2013-03-01 20:59:50

+0

剛剛給了一個去,它仍然不喜歡它,現在我有錯誤,當我甚至沒有改變一件事情時,我認爲這些錯誤與語法有關:/我覺得我現在太緊張了,甚至現在試圖解決這個問題。 – Elssar 2013-03-01 21:02:55