首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在方法C++中更改结构变量

在方法C++中更改结构变量
EN

Stack Overflow用户
提问于 2015-11-14 03:24:09
回答 2查看 55关注 0票数 0

因此,我正在为我的AI类制作一个类似C++跳棋的游戏。我遇到了一个让我发疯的小问题,每个对手的棋子都是一个包含方向的结构:布尔左;布尔右;当我尝试将其中一个值更改为真时,它似乎没有改变。这似乎是一个范围问题,但我不知道为什么,我一直在使用vs调试工具跟踪它。下面是一些代码:

代码语言:javascript
复制
     typedef struct {
        int pos;
        int num;
        bool left;
        bool right;
    }opp;
    int scoreOp(opp o){

        if (scoreMoveOp(o.pos + 7) == 10){
            o.left = true;
            return 10;
        }
        else if (scoreMoveOp(o.pos + 9) == 10){
            o.right = true;

            return 10;
        }

    int scoreOp(opp o){

        if (scoreMoveOp(o.pos + 7) == 10){ //scoreMoveOp essentially returns ten.
            o.left = true;
            return 10;
        }
        else if (scoreMoveOp(o.pos + 9) == 10){
            o.right = true;

            return 10;
        }

所有的一切都被称为:

代码语言:javascript
复制
    void checkOPPListForX(){
        for (int i = 0; i < O1Moves.size(); i++){
            if (X == O1Moves[i].second){
                //cout << "O1 has it, and its score is: " << scoreOp(O1) << endl;
                O1Score = scoreOp(O1);
                O1Check = true;
            }
            else O1Check = false;
        }

    checkOPPListForX();
            if (O1Score > O2Score && O1Score > O3Score && O1Score > O4Score){
                //move O1;
                //O1.pos
                if (O1.left)
                    O1.pos = O1.pos + 7;
                else if (O1.right)
                    O1.pos = O1.pos + 9;
            }
EN

回答 2

Stack Overflow用户

发布于 2015-11-14 03:27:18

通过值将变量传递给scoreOp函数,这意味着该函数将获得一个副本。当然,修改副本并不会修改原件。

您需要通过引用传递参数:

代码语言:javascript
复制
int scoreOp(opp& o){ ... }
//             ^
//             |
// Note ampersand here, which means that the argument is passed by reference
票数 2
EN

Stack Overflow用户

发布于 2015-11-14 03:29:05

最简单的方法是将您的函数放在struct中:

代码语言:javascript
复制
typedef struct {
    int pos;
    int num;
    bool left;
    bool right;
    int scoreOp() {.....}
}opp;

然后您可以使用opp.ScoreOp()调用它

这个解决方案是如果您不太习惯通过引用传递的话

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33700318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档