C++ cpp在声明之前是否运行该函数?
我是CPP新手,我想知道如何运行不在其作用域内的函数。我习惯于在javascript中做这样的事情,当我尝试这样做时,会得到一个错误CPP。我的意思是:C++ cpp在声明之前是否运行该函数?,c++,C++,我是CPP新手,我想知道如何运行不在其作用域内的函数。我习惯于在javascript中做这样的事情,当我尝试这样做时,会得到一个错误CPP。我的意思是: #include <iostream> using namespace std; int tic_h; int tic_v; void echo(string e_val){ cout << e_val; } void c_mes(){ echo("X|0|X\n"); echo("-----\n");
#include <iostream>
using namespace std;
int tic_h;
int tic_v;
void echo(string e_val){
cout << e_val;
}
void c_mes(){
echo("X|0|X\n");
echo("-----\n");
echo("X|0|X\n");
echo("-----\n");
echo("X|0|X\n");
s_v();
}
void s_v(){
echo("Please enter vertical coordinate: ");
cin >> tic_v;
if(tic_v<4&&tic_v>0){
c_mes();
}else{
s_v();
}
}
void s_h(){
echo("Please enter horizontal coordinate: ");
cin >> tic_h;
if(tic_h<4&&tic_h>0){
s_v();
}else{
s_h();
}
}
int main(){
s_h();
return 0;
}
#包括
使用名称空间std;
int tic_h;
int tic_v;
无效回音(字符串e_val){
cout>tic_v;
如果(tic_v0){
c_mes();
}否则{
s_v();
}
}
void s_h(){
echo(“请输入水平坐标:”);
cin>>tic_h;
如果(tic_h0){
s_v();
}否则{
s_h();
}
}
int main(){
s_h();
返回0;
}
我得到这个错误:
错误:“sv”未在此范围的第16行声明
如何使其工作?在使用该函数之前,您应该输入一个,以便编译器知道它将是什么
放
就在
#include
行之后。您需要添加void s#v()在c_mes()
函数之前执行code>。这称为函数原型,它让编译器知道该符号存在,并将在以后的代码中实现:
#include <iostream>
using namespace std;
int tic_h;
int tic_v;
void s_v();
void echo(string e_val) {
cout << e_val;
}
void c_mes() {
echo("X|0|X\n");
echo("-----\n");
echo("X|0|X\n");
echo("-----\n");
echo("X|0|X\n");
s_v();
}
void s_v() {
echo("Please enter vertical coordinate: ");
cin >> tic_v;
if (tic_v < 4 && tic_v > 0) {
c_mes();
} else {
s_v();
}
}
void s_h() {
echo("Please enter horizontal coordinate: ");
cin >> tic_h;
if (tic_h < 4 && tic_h > 0) {
s_v();
} else {
s_h();
}
}
int main() {
s_h();
return 0;
}
#包括
使用名称空间std;
int tic_h;
int tic_v;
无效s_v();
无效回音(字符串e_val){
cout>tic_v;
if(tic_v<4&&tic_v>0){
c_mes();
}否则{
s_v();
}
}
void s_h(){
echo(“请输入水平坐标:”);
cin>>tic_h;
if(tic_h<4&&tic_h>0){
s_v();
}否则{
s_h();
}
}
int main(){
s_h();
返回0;
}
请记住,如果您更改了s_v()
(即添加参数或更改返回类型)的签名,您也需要更新原型。您需要dostuff
,如下例所示
通过这样做,您可以告诉编译器函数将在其他位置定义,但您希望使用它
恕我直言,但对于一个新手程序员来说,我这样说很容易理解
#包括
使用名称空间std;
void dostuff();//远期申报
无效测试(int b){
if(b0){
不能在无效测试之前的某个地方声明,例如第3行:
void dostuff();
这样,您就可以在定义函数之前将dostuff
函数的签名引入到程序中
<>在C++中,与JavaScript和其他一些语言不同,解析器没有找到所有函数,然后编译代码。
void dostuff();
就在使用名称空间std;之后,它将工作:)这是相同的错误,您在声明它之前使用了一个函数(s_v()),要解决您的错误,您只需要创建一个s_v()的原型:
写这个
void c_mes(){
echo("X|0|X\n");
echo("-----\n");
echo("X|0|X\n");
echo("-----\n");
echo("X|0|X\n");
s_v();
}
此后
void s_h(){
echo("Please enter horizontal coordinate: ");
cin >> tic_h;
if(tic_h<4&&tic_h>0){
s_v();
}else{
s_h();
}
}
void s_h(){
echo(“请输入水平坐标:”);
cin>>tic_h;
如果(tic_h0){
s_v();
}否则{
s_h();
}
}
< C++ >代码>后面的代码> >()(代码)>在这个程序中没有任何意义,只是使用,例如,“代码> cOUT,我是一个Web开发者,所以我只是为了方便而制作了回声函数(PHP),因为我习惯了这种语法。”在C++中,这通常被称为“声明”。。函数体由“定义”提供。函数的(单个)定义可以在使用之后进行,但函数必须在使用之前声明。(类方法有例外)。
void s_v(); //at the start of your file
void c_mes(){
echo("X|0|X\n");
echo("-----\n");
echo("X|0|X\n");
echo("-----\n");
echo("X|0|X\n");
s_v();
}
void s_h(){
echo("Please enter horizontal coordinate: ");
cin >> tic_h;
if(tic_h<4&&tic_h>0){
s_v();
}else{
s_h();
}
}