C++ 我正在尝试使用c++; #包括 使用名称空间std; 模板 无效掉期(T&i、T&j) { 温度T=i; i=j; j=温度; } int main() { int m=5,n=10; 你的问题是什么
这是一个完美的例子,说明了为什么“使用namespace std;”会在最不经意的时候以误导和混淆的错误消息将您搞砸 从代码中删除“使用命名空间std”,并在需要时始终明确指定“std”,即C++ 我正在尝试使用c++; #包括 使用名称空间std; 模板 无效掉期(T&i、T&j) { 温度T=i; i=j; j=温度; } int main() { int m=5,n=10; 你的问题是什么,c++,C++,这是一个完美的例子,说明了为什么“使用namespace std;”会在最不经意的时候以误导和混淆的错误消息将您搞砸 从代码中删除“使用命名空间std”,并在需要时始终明确指定“std”,即std::cin,std::cout,等等 你需要保证你永远不会再写“使用命名空间STD”。完全忘记这是C++语言的一部分。 程序的固定版本(编译时没有任何问题)是: #include <iostream> using namespace std; template <typename T&
std::cin
,std::cout
,等等
<>你需要保证你永远不会再写“使用命名空间STD”。完全忘记这是C++语言的一部分。
程序的固定版本(编译时没有任何问题)是:
#include <iostream>
using namespace std;
template <typename T>
void swap(T& i, T& j)
{
T temp = i;
i = j;
j = temp;
}
int main()
{
int m = 5, n = 10;
cout << "Inputs: " << m << "," << n << endl;
swap(m, n);
cout << "Outputs: " << m << "," << n << endl;
return 0;
}
#包括
模板
无效掉期(T&i、T&j)
{
温度T=i;
i=j;
j=温度;
}
int main()
{
int m=5,n=10;
你的问题是
这是一个完美的例子,说明了为什么“使用namespace std;”会在最不经意的时候以误导和混淆的错误消息将您搞砸
从代码中删除“使用命名空间std”,并在需要时始终明确指定“std”,即std::cin
,std::cout
,等等
<>你需要保证你永远不会再写“使用命名空间STD”。完全忘记这是C++语言的一部分。
程序的固定版本(编译时没有任何问题)是:
#include <iostream>
using namespace std;
template <typename T>
void swap(T& i, T& j)
{
T temp = i;
i = j;
j = temp;
}
int main()
{
int m = 5, n = 10;
cout << "Inputs: " << m << "," << n << endl;
swap(m, n);
cout << "Outputs: " << m << "," << n << endl;
return 0;
}
#包括
模板
无效掉期(T&i、T&j)
{
温度T=i;
i=j;
j=温度;
}
int main()
{
int m=5,n=10;
std::coutswap()已经是std命名空间中定义的函数。请将您的方法重命名为其他方法
#include <iostream>
template <typename T>
void swap(T& i, T& j)
{
T temp = i;
i = j;
j = temp;
}
int main()
{
int m = 5, n = 10;
std::cout << "Inputs: " << m << "," << n << std::endl;
swap(m, n);
std::cout << "Outputs: " << m << "," << n << std::endl;
return 0;
}
使用名称空间std;
模板
真空抽汲器(T&i、T&j)
{
温度T=i;
i=j;
j=温度;
}
int main()
{
int m=5,n=10;
coutswap()已经是std命名空间中定义的函数。请将您的方法重命名为其他方法
#include <iostream>
template <typename T>
void swap(T& i, T& j)
{
T temp = i;
i = j;
j = temp;
}
int main()
{
int m = 5, n = 10;
std::cout << "Inputs: " << m << "," << n << std::endl;
swap(m, n);
std::cout << "Outputs: " << m << "," << n << std::endl;
return 0;
}
使用名称空间std;
模板
真空抽汲器(T&i、T&j)
{
温度T=i;
i=j;
j=温度;
}
int main()
{
int m=5,n=10;
cout错误消息清楚地表明:错误:对“swap”的调用不明确
这是因为swap
是名称空间std
的一部分
而且,由于您使用的是命名空间std;
,这是不明确的
您可以通过以下方式解决此问题:
1.使用命名空间std删除行;
2.将模板函数重命名为其他函数错误消息清楚地显示:错误:调用“swap”不明确
这是因为swap
是名称空间std
的一部分
而且,由于您使用的是命名空间std;
,这是不明确的
您可以通过以下方式解决此问题:
1.使用命名空间std删除行;
2.将模板函数重命名为其他函数实际上,您的代码中有许多问题会导致错误消息。并且,由于您的实现(即您正在使用的标准库),导致该问题的原因有一个
首先,您定义了一个模板化的swap()
,其形式与名为swap()
的现有函数相同(通过引用接受两个相同类型的对象)
其次,使用命名空间std的告诉编译器命名空间std
中的名称是匹配代码中名称的候选名称。因此,当编译器看到您的代码交换(m,n)
其中m
和n
是int
时,它会同时看到您的定义和命名空间std
中的定义(即,std::swap()
作为可行的候选者,以匹配代码中的名称swap()
。两个候选者都能够接受两个类型为(引用)int
的参数,因此编译器没有理由选择一个参数而不是另一个参数。因此,编译器拒绝您的代码时会显示一条关于歧义的错误消息
第三个问题是在您的实现中(即您的编译器及其关联的标准库)
显然已经在std::swap()
的定义中引入了。问题是
也不需要这样做(即,如果您使用不同的编译器构建代码,您不能指望它发生)也不要求不这样做(即,您的代码可以使用某些编译器/库进行编译,但其他编译器/库不会)
实际上,标准要求在
中声明std::swap()
,而不是在
中声明
因此,让代码与所有编译器一起工作的选项很简单。第一个选项是根本不定义自己的swap()
,而是依赖标准库
using namespace std;
template <typename T>
void swaper(T& i, T& j)
{
T temp = i;
i = j;
j = temp;
}
int main()
{
int m = 5, n = 10;
cout << "Inputs: " << m << "," << n << endl;
swaper(m, n);
cout << "Outputs: " << m << "," << n << endl;
return 0;
}
第三个选项是使用命名空间std从代码中删除。这将允许您安全地声明自己的swap()
,而不会与std::swap()
冲突
我对该选项的偏好的简短解释是,它还避免了其他各种歧义问题。保存的不必在名称上添加前缀的键入std::
,不值得在出现其他歧义问题时带来麻烦。实际上,您的代码中有许多问题会导致错误消息由于您的实现(即您正在使用的标准库),导致问题的原因之一是ge
首先,您定义了一个模板化的swap()
,其形式与名为swap()
的现有函数相同(通过引用接受两个相同类型的对象)
其次,使用名称空间std
告诉编译器名称空间std
中的名称是匹配代码中名称的候选名称。因此,当编译器看到您的代码交换(m,n)
其中m
和n
是int
时,它会同时看到您的定义和名称空间std中的定义
#include <iostream>
#include <algorithm>
template <typename T>
void swap(T& i, T& j)
{
T temp = i;
i = j;
j = temp;
}
int main()
{
int m = 5, n = 10;
std::cout << "Inputs: " << m << "," << n << std::endl;
swap(m, n);
std::cout << "Outputs: " << m << "," << n << std::endl;
return 0;
}
#include <iostream>
#include <algorithm> // Needed to guarantee visibility of std::swap()
int main()
{
int m = 5, n = 10;
std::cout << "Inputs: " << m << "," << n << std::endl;
std::swap(m, n);
std::cout << "Outputs: " << m << "," << n << std::endl;
return 0;
}