C++17结构化绑定报错:无法使用'int'类型,代码问题咨询
问题分析与解决
你的代码出错核心原因如下:
- 结构化绑定是声明新变量的语法,你提前已经声明了
int c, b;,后续auto [c,b]试图再次声明同名变量,违反了C++同一作用域内变量不能重复声明的规则,这是报错的直接诱因。 - 你混淆了结构化绑定与
std::tie的用法:结构化绑定用于创建新变量并绑定到tuple元素;若要给已存在的变量赋值,应当使用std::tie。
修正方案
方案1:直接用结构化绑定声明新变量
去掉提前声明的int c, b;,让结构化绑定自动推导并创建变量:
#include <tuple> int main() { auto [c, b] = std::make_tuple(12, 14); // 此时c=12,b=14,类型均为int return 0; }
方案2:给已声明的变量赋值(复用原有变量)
如果需要保留提前声明的int c, b;,改用std::tie完成赋值:
#include <tuple> int main() { int c, b; std::tie(c, b) = std::make_tuple(12, 14); // 赋值后c=12,b=14 return 0; }
方案3:创建引用类型的tuple(对应你提到的tuple<int, int&>)
如果需要tuple存储引用而非值,用std::ref包装变量,结合结构化绑定或直接声明tuple:
#include <tuple> #include <functional> // 用于std::ref int main() { int x = 4, y = 3; // 直接声明引用类型tuple std::tuple<int, int&> t = std::make_tuple(x, std::ref(y)); // 或者用结构化绑定获取引用 auto [a, b] = std::make_tuple(std::ref(x), std::ref(y)); // a是int&,绑定到x;b是int&,绑定到y return 0; }
内容的提问来源于stack exchange,提问作者Marwan_Tamer
相关产品推荐
相关产品推荐

