问题描述
C++代码编译错误:
using namespace std;
using ll = long long;
const int N = 1e6 + 7;
ll prev[N];
原因分析
在C++的标准库中,std
命名空间包含一个名为 std::prev
的函数,该函数用于获取容器中的前一个迭代器。在上述代码中,通过 using namespace std;
语句,所有 std
命名空间中的名称都被引入到全局命名空间中。
因此,当定义 prev
数组时,编译器在 prev
数组和 std::prev
函数之间产生了混淆,无法确定 prev
到底是一个类型还是一个函数。这就是编译错误的根本原因。
注意
C 语言不会有这个问题。C++ 中的 std::prev
函数是 C++ 标准库中的一部分,而 C 语言并不包含这个函数。此外,C 语言也没有命名空间的概念,所以不会出现因为 using namespace std;
而导致的命名冲突。
解决方案
方法一:避免使用全局命名空间
不使用 using namespace std;
语句,而是在每个标准库函数或对象前明确地使用 std::
前缀。这样可以避免命名冲突。
using ll = long long;
const int N = 1e6 + 7;
ll prev[N];
方法二:修改数组名
为数组选择一个不会与 std
命名空间中的任何名称冲突的新名称。
using namespace std;
using ll = long long;
const int N = 1e6 + 7;
ll pre[N];
标签:std,ambiguous,reference,ll,long,命名,using,prev
From: https://blog.csdn.net/qq_34988204/article/details/137639482