为什么我的 C++ 函数只有在 main() 之后才起作用?
Why does my C++ function, only when it's placed after main(), not work?
我最近学习了 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";
}
int func();
和
int func(int x)
看出区别了吗?第一个应该是
int func(int x);
你告诉编译器 func
是一个没有参数的函数,然后当你试图用一个参数调用它时,编译器说 'no matching function'.
在C语言中,声明int func();
表示一个具有未指定数量的任意类型参数的函数,返回一个 int
.
在C++语言中,相同的声明int func();
表示一个函数没有任何参数,返回一个int
.
因此,在 C++ 中,带有类型 int
参数的 func
的定义是 重载 。对于编译器来说,是一个different函数,在原代码中使用前没有声明,所以会报错。
但在 C 中,这是完全合法的。
我最近学习了 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";
}
int func();
和
int func(int x)
看出区别了吗?第一个应该是
int func(int x);
你告诉编译器 func
是一个没有参数的函数,然后当你试图用一个参数调用它时,编译器说 'no matching function'.
在C语言中,声明int func();
表示一个具有未指定数量的任意类型参数的函数,返回一个 int
.
在C++语言中,相同的声明int func();
表示一个函数没有任何参数,返回一个int
.
因此,在 C++ 中,带有类型 int
参数的 func
的定义是 重载 。对于编译器来说,是一个different函数,在原代码中使用前没有声明,所以会报错。
但在 C 中,这是完全合法的。