Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cpp在声明之前是否运行该函数?_C++ - Fatal编程技术网

C++ 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");

我是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");
  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();
  }
}