-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
    }
4

4 回答 4

1

像这样?

void display()
{
    box A, B, C, D, E, Q;
    // ...
    checker(A, B, C, D, E, Q);
    // ...
}
于 2012-11-04T00:13:34.860 回答
1

你想知道如何传递参数吗?

你似乎是 C++ 的新手。您可能想阅读一些有关函数的信息。

功能(一)关于Cplusplus

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
    }
}
于 2012-11-04T00:14:43.103 回答
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,以便在退出函数时保留该函数所做的任何修改。

因此,您需要将 checker 的原型更改为:

void checker(box &A, box &B, box &C, box &D, box &E, box &Q){
   /* your function body here */
}
于 2012-11-04T00:16:56.627 回答
0

您需要进一步澄清您的问题。但从上下文来看,这表明您正在尝试执行以下操作:

  1. 您有一个包含一组对象的游戏。
  2. 每个对象都由 this 结构体表示:

    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 
  }

};
于 2012-11-04T01:05:44.940 回答