我只是在学习 C ++ ,我在这里有一些代码:
using namespace std;
int main()
{
cout<<"This program will calculate the weight of any mass on the moon\n";
double moon_g();
}
double moon_g (double a, double b)
{
cout<<"Enter the mass in kilograms. Use decimal point for any number entered";
cin>>a;
b=(17*9.8)/100;
double mg=a*b;
return mg;
}
它编译,但是当我运行它时它只打印出来:
This program will calculate the weight of any mass on the moon
但不执行moon_g
功能。
答案 0 :(得分:5)
这一行:
double moon_g();
实际上并不做任何事情,它只是声明函数double moon_g()
存在。你想要的是这样的:
double weight = moon_g();
cout << "Weight is " << weight << endl;
这还不行,因为你没有函数double moon_g()
,你所拥有的是一个函数double moon_g(double a, double b)
。但是那些参数并没有真正用于任何事情(好吧,它们是,但是没有理由让它们作为参数传递)。所以从你的功能中消除它们就像这样:
double moon_g()
{
cout<<"Enter the mass in kilograms. Use decimal point for any number entered";
double a;
cin>>a;
double b=(17*9.8)/100;
double mg=a*b;
return mg;
}
(并在调用之前声明该函数。)可以进行更多细化,但现在就足够了。
答案 1 :(得分:2)
这是一个函数声明:
double moon_g();
这不会调用函数,如果你确实正确,这意味着添加两个参数,因为这是你在下面定义它的方式:
moon_g( a, b ) ;
它不起作用,因为您需要在moon_g
之前移动main
的定义,或者在main
之前添加前向声明:
double moon_g (double a, double b) ;
虽然看起来a
和b
不是输入而是要返回main
的值,但是您需要使用引用,它需要声明和定义像这样:
double moon_g (double &a, double &b) ;
^ ^
一个有用的线索,特别是如果您开始时将是What is the difference between a definition and a declaration?。
您使用的编译器在这里有所不同clang
提供以下警告:
warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]
double moon_g();
^~
虽然我无法让gcc
或Visual Studio
警告我这件事。从长远来看,在不同的 C ++ 编译器中尝试代码是很有用的,它可以是一种非常有教育意义的体验,并且您不需要安装它们,因为有很多{{3 }}
答案 2 :(得分:1)
调用函数和声明函数之间存在巨大差异,就像局部变量和函数参数之间存在差异一样。
我建议先阅读基础教程。
无论如何,这就是代码的样子:
#include <iostream>
using namespace std;
double moon_g ()
{
double a,b;
cout<<"Enter the mass in kilograms. Use decimal point for any number entered\n";
cin>>a;
b=(17*9.8)/100;
double mg=a*b;
return mg;
}
int main()
{
cout<<"This program will calculate the weight of any mass on the moon\n";
cout<<"Result is: "<<moon_g();
}
答案 3 :(得分:0)
您的代码中存在两个问题。
首先,如果你想调用你的功能
double moon_g (double a, double b) // this means if you want to call moon_g() you must provide arguments a and b, otherwise, the you will encounter an compile error.
{
cout<<"Enter the mass in kilograms. Use decimal point for any number entered";
cin>>a;
b=(17*9.8)/100;
double mg=a*b;
return mg;
}
您应该提供两个参数a
和b
。
但是a
和b
是在函数定义的主体中计算的,没有必要声明这两个参数。你可以这样写。
double moon_g () //this means function moon_g() does not accept any arguments
{
double a, b; // declare a and b in the definition body instead of in the arguments list
cout<<"Enter the mass in kilograms. Use decimal point for any number entered";
cin>>a;
b=(17*9.8)/100;
double mg=a*b;
return mg;
}
然后,在main函数中,您的调用函数语句是错误的。您可能希望收到返回值。所以,你应该写这样的代码。
int main()
{
cout<<"This program will calculate the weight of any mass on the moon\n";
double ret = moon_g();
}
最后,大多数建议应该先声明或定义另一个函数调用的函数。