我试图让我的函数返回3个值(n,down和have ),我在网上读到了如何使用'auto‘,但肯定是做错了什么。该函数接受整数(以及其他变量)的2D向量,并检查有多少数字连接到电路板,以使它们是相同的数字。我试着把auto放在函数本身内部的函数前面,试着把它留空,试着让chain = chainNodes(...)但我似乎总是会遇到错误。代码如下:
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的行上。
发布于 2020-04-23 22:17:09
问题与
auto [n, iPoint, jPoint] = chainNodes(board, originalNum, across, down, ijSum, n);类似于
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;。
您的代码还有其他错误,我不清楚函数的预期行为。
因此,不确定以下修复是否正确,但您可能希望:
n = std::get<0>(chainNodes(board, originalNum, across, down, ijSum, n));https://stackoverflow.com/questions/61388603
复制相似问题