c++ - 为什么我的 C++ 函数只有放在 main() 之后才起作用?
问题描述
我最近学习了 C++,并决定尝试制作一个函数。但是,我的函数遇到了一个问题func()
,即使事先声明,它也只有放在main()
函数之前才有效。
如果我把它放在main()
函数之后,系统会告诉我“没有匹配的函数调用func
”。
注意:func2
另一方面,即使放置在函数之前或之后,该main()
函数也可以工作。
所以这里是代码:
#include <stdio.h>
#include <iostream>
void func2();
int func();
int main()
{
int y=2;
std :: cout << "Hello World\n" << func(y) << "\n";
func2();
return 0;
}
int func(int x)
{
x *= 2;
return x;
}
void func2()
{
std :: cout << "Hello there";
}
解决方案
在 C 语言中,声明int func();
是指具有未指定数量的任何类型的参数的函数,返回一个 int
.
在 C++ 语言中,相同的声明int func();
意味着一个没有任何参数的函数,返回一个 int
.
因此,在 C++ 中,func
带有类型参数的定义int
是重载。对于编译器来说,它是一个不同的函数,它在原始代码中没有在使用前声明,所以会发出错误。
但在 C 中,这将是完全合法的。
推荐阅读
- token - ANTLR4 令牌仅在上下文中
- c# - How can I make a bordered circle button expand into a bordered pill button on hover in Unity, and still maintain the border thickness?
- dialog - 如何在执行操作时隐藏模型对话框?
- spring - 如何增强 Spring Boot REST API 以处理数万或更多的传入请求?
- sql - 如何根据间隔过滤sql中的行
- javascript - 如何像 React 中的 {...props} 一样在 Vue 中解构 props?
- python - Pyscreenshot Fedora/Linux 中的黑色截图
- java - 没有 Spring 的自定义 prometheus 指标
- mysql - 在 MySQL 中高效计算大求和
- mongodb - Mongodb:“数据库”对象上的“查找”方法失败,因为不存在这样的方法