首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在“auto”C++的推导前使用“n”

在“auto”C++的推导前使用“n”
EN

Stack Overflow用户
提问于 2020-04-23 21:36:33
回答 1查看 103关注 0票数 0

我试图让我的函数返回3个值(n,down和have ),我在网上读到了如何使用'auto‘,但肯定是做错了什么。该函数接受整数(以及其他变量)的2D向量,并检查有多少数字连接到电路板,以使它们是相同的数字。我试着把auto放在函数本身内部的函数前面,试着把它留空,试着让chain = chainNodes(...)但我似乎总是会遇到错误。代码如下:

代码语言:javascript
复制
tuple<int, int, int> chainNodes(vector<vector<int>> board, int originalNum,
                                unsigned int across, unsigned int down, int ijSum,
                                int n)
{
    struct chain {
        int n, down, across;
    };

    if(down + across > ijSum) {
        ijSum = down + across;
    } else if((down + across == ijSum) &&
              ((down - across) * (down - across) < (ijSum) * (ijSum))) {
        ijSum = down + across;
    }

    board[down][across] = 0;
    n += 1;

    // Check below
    if((down != (board.size() - 1)) && (board[down + 1][across]) == originalNum) {
        down += 1;
        auto [n, iPoint, jPoint] = chainNodes(board, originalNum, across, down, ijSum, n);
        down -= 1;
    }
    // Check right, up and left (I've removed so its not too messy here)

    return chain{n, down, across};
}

对不起,我忘了包括错误消息。错误:在推导' auto‘之前使用'n’它出现在使用auto的行上。

EN

回答 1

Stack Overflow用户

发布于 2020-04-23 22:17:09

问题与

代码语言:javascript
复制
auto [n, iPoint, jPoint] = chainNodes(board, originalNum, across, down, ijSum, n);

类似于

代码语言:javascript
复制
auto n = foo(n); // `foo(n)` uses `n` from `auto n`,
                 // not the one from outer scope as function parameter

构造int a = a + 1;是合法的,但会导致UB读取未初始化的变量。

这种构造允许合法和有效的行为void* p = &p;

您的代码还有其他错误,我不清楚函数的预期行为。

因此,不确定以下修复是否正确,但您可能希望:

代码语言:javascript
复制
n = std::get<0>(chainNodes(board, originalNum, across, down, ijSum, n));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61388603

复制
相关文章

相似问题

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