2012-11-04 62 views
-1

那麼我有一個結構和兩個函數,在我使用結構來執行一些檢查的函數之一中,我想在另一個函數中調用該函數,所以當某個動作在該功能中,另一個可以進行檢查。假設對象球上升,在再次移動之前執行檢查。我知道你可以在另一個函數中調用函數,但是我不能像調用變量int那樣調用其他函數的方式,例如我想象因爲結構。如何在顯示功能中調用該檢查器功能?提前致謝!在另一個函數中調用函數結構作爲變量

struct box{ 
    //code 
    }; 

    void checker(box A, box B, box C, box D, box E, box Q){ 
    /*Creating struct of type boxes here and statements to cheack if any of the limits between them intersect each other*/ 
    } 

    void display(){ 
    //Displaying the objects here that are inside the structure box to check collision 
    } 
+3

什麼是你的問題? –

+0

如何在顯示功能中調用該檢查器功能 –

回答

1

是這樣的?

void display() 
{ 
    box A, B, C, D, E, Q; 
    // ... 
    checker(A, B, C, D, E, Q); 
    // ... 
} 
+0

我試過了它告訴我A是未聲明的標識符A –

+0

您可以發佈您的實際代碼嗎?在這裏,「A」被明確聲明。 – ezod

1

你想知道如何傳遞參數嗎?

你似乎是C++的新手。您可能想閱讀一些關於功能的內容。

Functions (I) On Cplusplus

Functions (II) On Cplusplus

struct box{ 
//code 
}; //forgot semicolon 

void checker(box A, box B, box C, box D, box E, box Q){ 
//code 
} 

void display() //forgot parenthesis 
{ 
    box A, B, C, D, E, Q; 

    //initialize and use variables. 

    //call function... 
    checker(A, B, C, D, E, Q); 
} 

很難準確的告訴你是問。

一個想法。

也許你想這樣的事情(瞎猜這裏大多隻是顯示你一個場景。):

class Box 
{ 
//code 
}; 

class GameState 
{ 
    public: 
     GameState(map<std::string, Box> _boxes); 
     void display(); 
     void moveBox(std::string boxID, int x, int y); 
    private: 
     bool checkMove(std::string boxID, int x, int y); 

     std::map<std::string, Box> boxes; 
}; 

void mainLoop() 
{ 
    map<string, Box> boxes; 
    boxes["A"] = Box(); 
    boxes["B"] = Box(); 
    boxes["C"] = Box(); 
    boxes["D"] = Box(); 
    boxes["E"] = Box(); 
    boxes["Q"] = Box(); 

    bool quit = false; 
    GameState game(boxes); 

    while(true) 
    { 
     int action = game.getAction(); 

     switch(action) 
     { 
      case DISPLAY_ACTION: 
       game.display(); 
       break; 
      case MOVE_ACTION: 
       string boxId; 
       int x, y; 
       //get those somehow... 

       game.moveBox(boxId, x, y); 
       break; 
      case QUIT; 
       quit = true; 
       break; 
     } 
     if (quit) 
      break; 
    } 
} 

int GameState::getAction(box& aBox) 
{ 
    //return some action code 
} 

bool GameState::checkMove(string boxId, int x, y) 
{ 
    //check box 
} 

void GameState::display() 
{ 

} 

void GameState::moveBox(string boxId, int x, int y) 
{ 
    if (checkMove(boxId, x, y)) 
    { 
     //more code 
    } 
} 
+0

'void display()//忘記了方括號;;) – ezod

+0

它基本上是一個遊戲的碰撞檢查器,我希望在顯示函數中調用檢查器,以便在實際顯示圖像之前檢查是否存在碰撞。感謝你的幫助! –

+0

@VicoPelaez那麼你可能想要一個類或結構來維護狀態。 –

0

首先,顯示函數的原型缺少它的參數:

void display(/* parameters here if needed */) { 
//I want to call the void checker here 
} 

關於你的問題,調用一個函數是一件微不足道的事情。例如,具有顯示功能的不帶任何參數:

void display() { 
    // have some boxes defined here 
    Box ba,bb,bc,bd,be,bq; 
    // here we have some code related to the boxes 
    // (...) 
    // (...) 
    // and now we call the function checker 
    checker(ba,bb,bc,cd,be,bq); 
} 

但是,好像你也想創建盒子的內容checker,然後在display顯示它們。爲此,您需要將Box對象通過引用傳遞給checker,以便在退出該函數時保留該函數所做的任何修改。

因此,你需要檢查的原型改爲:

void checker(box &A, box &B, box &C, box &D, box &E, box &Q){ 
    /* your function body here */ 
} 
+0

所以我應該把類似無效顯示(無效檢查器)?或只是像無效顯示(檢查器)檢查? –

+0

您不需要將'checker'函數作爲參數傳遞給'display'函數。只要'checker'在'display'之前聲明或定義,上面給出的示例應該沒問題。 – didierc

+0

我添加了更多關於你想使用'checker' – didierc

0

你需要進一步澄清你的問題。但從上下文來看,這表明您正在嘗試執行以下操作:

  1. 您有一個包含一組對象的遊戲。
  2. 每個對象由這個結構表示:

    struct box { }; 
    
  3. 你必須顯示您的遊戲的狀態(佈局)的顯示功能。

  4. 您想在顯示之前檢查是否有碰撞。

如果上面是你想什麼來實現的,下面的代碼可能會做的工作:

class Game { 
public: 
    Game() {} // Initialize your box objects here 
    ~Game() {} 

    void display() { 
    // Your code 
    checker(a_, b_); // Check here 
    // Display code 
    } 

private: 
    struct Box { 
    // box state data 
    }; 

    Box a_; 
    Box b_; 
    // ... etc. 

    void checker(const Box& a, const Box& b) const { 
    // Do your check here 
    // I used const here assuming your checker has no side effects 
    } 

}; 
相關問題