C++ c++;类传递成员函数问题

C++ c++;类传递成员函数问题,c++,function,class,C++,Function,Class,在课堂上,我们学习了关于类和结构的知识,我正在编写一个程序,该程序应该是类中的成员函数,一个进行计算,一个返回某些值,似乎调用函数时遇到了麻烦,也许?我不是100%肯定,因为C++不能指定错误。我希望你能帮助我,提前谢谢你 #include <iostream> #include <cstdlib> using namespace std; void rocket(double massR,double massE, double massP,double avgTh,

在课堂上,我们学习了关于类和结构的知识,我正在编写一个程序,该程序应该是类中的成员函数,一个进行计算,一个返回某些值,似乎调用函数时遇到了麻烦,也许?我不是100%肯定,因为C++不能指定错误。我希望你能帮助我,提前谢谢你

#include <iostream>
#include <cstdlib>
using namespace std; 
void rocket(double massR,double massE, double massP,double avgTh,double bd);
double rocketreturn(double& MV,double& MA);

class Rocket
{
private:
 double massR;
 double massE;
 double massP;
 double avgTh; // average thrust
 double bd;    //burn duration

public:

void rocket(double massR,double massE, double massP,double avgTh,double bd) 
{
 massR=massR/1000;
 massE=massE/1000;
 massP=massP/1000;
 double LM=massR+massE;
 double MCP=massR+massE-massP;
 double AM=(LM+MCP)/2;
 double acc=(avgTh/AM)-9.8;
 double MV= acc * bd;
 double Alt=.5*acc*.5*.5;
 double t=MV/9.8; 
 double MA=Alt+MV*t+.5*-9.8*t*t;
  }

 double rocketreturn(double& MV, double& MA)
 {
 cout<< MV;
 cout<< MA;
 }
};



int main( )
{
double massR; // mass of the rocket
double massE; // mass of the engine
double massP; // mass of the propellant
double avgTh; // average thrust
double bd; // burn duration
double MV; // max velocity
double MA; // max altitude
char ans;
system("CLS");
cout << "Take Home # by - "
     << "Rocket Object\n\n";

do
{
cout <<"Enter the mass of the rocket: "<<endl;
cin >> massR;   
cout <<"Enter the mass of the engine: "<<endl;
cin >> massE;
cout <<"Enter the mass of the propellant: "<<endl;
cin >> massP;
cout <<"Enter the average thrust of the engine: "<<endl;
cin >> avgTh;
cout <<"Enter the burn duration of the engine: "<<endl;
cin >> bd;

rocketreturn(MV,MA);

cout <<"the rockets maximum velocity is " << MV<<endl;
cout <<"the rockets maximum altitude is "<<MA<<endl;

cout <<"Would you like to run the program again (Y or N)?"<<endl;
cin>>ans;
}
while(ans=='y'||ans=='Y');
#包括
#包括
使用名称空间std;
真空火箭(双质量、双质量、双质量、双平均高度、双bd);
双火箭转弯(双和中压、双和MA);
级火箭
{
私人:
双质量;
双质量;
双质量;
双平均推力;//平均推力
双bd;//刻录持续时间
公众:
真空火箭(双质量,双质量,双质量,双平均高度,双bd)
{
质量R=质量R/1000;
质量=质量/1000;
质量p=质量p/1000;
双LM=质量R+质量;
双MCP=质量R+质量P;
双AM=(LM+MCP)/2;
双acc=(平均/调幅)-9.8;
双MV=acc*bd;
双Alt=.5*acc*.5*.5;
双t=MV/9.8;
双MA=Alt+MV*t+.5*-9.8*t*t;
}
双火箭转弯(双和中压、双和MA)
{

cout您可以尝试使用以下程序结构,并按照您希望的方式填写详细信息。注意,它不会编译

#包括
使用名称空间std;
级火箭{
私人:
双先生,我;
公众:
/*构造函数。您的程序中缺少它。您可能需要它*/
火箭(双质量,双质量){
/*最好使用初始化列表,但这也应该有效*/
mR=massR;
我=大众;
}
双火箭转弯(双a、双b){
/*用参数做某事,但返回一个双精度,
你没有在你的程序中做这些*/
双结果=a+b;
返回结果;
}
};
int main(){
双x,y;
做{
cin>>x>>y;
火箭我的火箭(x,y);
double z=my_rocket.rocketreturn(x,y);//不需要赋值
}而(/*某些条件*/)//我的火箭对象将在作用域熄灭后被销毁
返回0;
}

请回答您的问题,解释“C++无法指定错误”的含义。感谢您改进了问题的参考值并使其更易于回答!粘贴编译器错误输出。我认为您不需要在顶部声明函数,而且我看不到任何类型的对象创建
Rocket
Rocket函数的最后8行实际上没有任何作用,因为您创建的值无效函数末尾的y(您没有返回它们或影响全局)。您可能想问问自己,您希望从该处理中得到什么。您已经声明了两个全局的非成员函数
::rocket
::rocketreturn
。您正在调用后者。但是您没有实际实现它们中的任何一个。独立地,您有类
rocket
,有两个成员函数
Rocket::rocket
rocket::rocketreturn
(这两个函数与恰好具有相同名称的全局函数完全无关,并且独立于全局函数)。您从未创建过
Rocket
的实例,当然也从未调用过它的任何成员函数。谢谢您的帮助,您能解释一下为什么我需要一个构造函数吗?类和函数的名称现在已更改,所以我不能100%确定我是否需要它。@Notkrokidal上面的程序只是一个提示。正如其他人指出的UT,你可能需要考虑你的程序所期望的。我建议选择一本关于C++的好书,并且一般地阅读构造函数和类。这里有一大堆书:
#include <iostream>

using namespace std;

class Rocket {
  private:
    double mR, mE;
  public:
    /* Constructor. It is missing in your program. You probably want it */
    Rocket(double massR, double massE) {
      /* Better to use initialization list, but this should work too */
      mR = massR;
      mE = massE;
    }

    double rocketreturn(double & a, double & b) {
      /* Do sth with the parameters. But return a double, 
         which you are not doing in your program */
       double result = a + b;
       return result;
    }

};

int main() {
    double x, y;
    do {
        cin >> x >> y;
        Rocket my_rocket(x, y);
        double z = my_rocket.rocketreturn(x, y);  // Assignment not necessary

    } while ( /* some condition */) //my_rocket object will be destroyed after scope goes out
    return 0;
}