我是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;
}
我收到此错误:
错误:第16行未在此范围内声明'sv'
我怎样才能让它发挥作用?
答案 0 :(得分:7)
在使用该函数之前,您应该放置一个function prototype,以便编译器知道它将会是什么。
把
void s_v(); // prototype your functions, this is usually done in include files
在#include
行之后。
答案 1 :(得分:4)
您需要forward declare dostuff
,如下例所示。
通过这样做你几乎告诉编译器该函数将被定义在其他地方,但是你想要使用它。
请原谅措辞,但是按照新手程序员的说法,按照我的方式进行操作非常全面。
#include <iostream>
using namespace std;
void dostuff (); // forward declaration
void test(int b){
if(b<11&&b>0){
cout << "Yay!";
}
else{
cout << "The number is not between 1 and 10.";
dostuff();
}
}
void dostuff(){
int numput;
cout << "Please type a number between 1 and 10:";
cin >> numput;
test(numput);
}
int main(){
dostuff();
}
OP刚刚编辑了他的问题中提供的原始片段(以下是修改版本),我将保留这篇文章,因为它很好地解释了这种情况。
答案 2 :(得分:2)
您需要在void s_v();
功能之前添加c_mes()
。这称为函数原型,它让编译器知道该符号存在,并将在稍后的代码中实现:
#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;
}
请记住,如果您更改s_v()
的签名(即添加参数或更改返回类型),您还需要更新原型。
答案 3 :(得分:1)
在dostuff
定义之前的某个位置声明void test
,例如第3行:
void dostuff();
这样,您可以在定义函数之前向程序中引入dostuff
函数的签名。
在C ++中,与javascript和其他一些语言不同,解析器找不到所有函数,然后编译代码。
答案 4 :(得分:0)
添加
void dostuff();
在using namespace std之后;它会起作用:))
答案 5 :(得分:0)
这是同样的错误,你在声明它之前使用一个函数(s_v()),为了解决你的错误你只应该创建一个s_v()的原型:
void s_v(); //at the start of your file
答案 6 :(得分:0)
写这个
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();
}
}