C++命名空间中调用 void 函数的错误
C++ error to call void function in namespace
我刚开始学习c ++,在练习时遇到了错误。我正在练习使用命名空间和cin,cout。
我试图通过每个输入打印出每个命名空间的功能。下面是我写的代码:
#include "iostream"
using namespace std;
namespace ns1
{
int pp()
{
int x = 1;
for (int i = 0; i < 9; i++)
{
cout << x << endl;
x++;
}
return 0;
}
}
namespace ns2
{
void pp()
{
double x = 2;
while (x < 6)
{
cout << x << endl;
x += 1.7;
}
}
}
int main()
{
bool check = 0;
cout << "Type 0 or 1 then you will have the following answer" << endl;
cin >> check;
if (check == 0)
{
cout << ns1::pp() << endl;
}
else
{
cout << ns2::pp() << endl;
}
return 0;
}
我不知道为什么 void pp(( 不能打印出来。
谁能告诉我为什么会这样?
首先,让我们将问题简化为 MCVE,并从程序中消除尽可能多的噪音。
#include <iostream>
void pp()
{
}
int main()
{
std::cout << pp();
}
这会产生完全相同的错误,没有命名空间或其他干扰。
问题的症结在于pp
从函数返回void
,即什么都没有。由于不返回任何内容,因此没有要输出的内容。
因为编写一个不输出任何内容的输出函数本质上是浪费程序员的时间,所以没有人认为指定标准库实现者必须实现处理void
的operator<<
合适。正如 Justin 在下面的评论中指出的那样,您不能将void
用作函数参数,因为无法实例化void
类型的变量。这使得它不仅浪费时间,而且是不可能的。
您会发现自定义类会遇到类似的问题。除非有人花时间为类编写<<
重载,否则无法打印该类,除非可以先将其转换为可打印的类或数据类型。
对于标准库容器,没有商定的默认输出容器方式,因此库容器没有内置<<
重载。当您第一次尝试打印std::vector
时,这通常会令人震惊。
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- C++ OpenCV 卡尔曼滤波器构造函数错误
- C++:用户定义的显式类型转换函数错误
- C++ 合并字符串以'system'函数错误
- C++ wmain 函数错误时使用 Unicode
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++ 中常量属性的初始化构造函数错误
- 线程 std::调用未知类型,无法专门化函数错误
- 表单显示对话框函数错误,并且不执行下面的语句
- 函数错误 C2059:语法错误:'>'不起作用
- STL向量上出现奇怪的复制构造函数错误
- C++ Visual Studio 重载函数错误:没有重载函数的实例与指定的类型匹配
- C++引用已删除函数错误
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- C++ 乘法定义的构造函数错误消息似乎错误
- 在 c++ 代码中将数组传递给函数错误
- FFMPEG avcodec_decode_video2函数错误代码
- 为什么我会收到转换函数错误