2017-04-05 28 views
0

enter image description here变量不能在类之间传递?我的循环结构错了吗?

我需要下面的代码看起来像上面的输出,但是我很难得到它这样。出于某种原因,我认为费率变量没有得到填充,我不知道为什么。此外,我很难得到奖金来计算并正确显示。

#include <iostream> 
#include <iostream> 
#include <iomanip> 
#include "Chap1227.h" 

using namespace std; 

//function prototypes 
double getBonusRate(double rate); 
void columnsDashes(); 
void endPgm(); 


int main() { 

    double rate = 0.0; 

     //filling array 
     int salesArray[10][4] = {{2400, 3500, 2000, 2750}, 
           {1500, 7000, 1000, 2225}, 
           {2600, 2450, 2100, 2999}, 
           {2790, 2240, 2500, 2885}, 
           {2100, 2600, 2300, 3000}, 
           {6300, 7000, 8000, 5550}, 
           {3300, 1850, 2950, 2100}, 
           {2700, 5500, 6000, 7200}, 
           {4700, 4800, 4900, 5100}, 
           {2375, 3300, 2550, 1925}}; 

     getBonusRate(rate); 

     columnsDashes(); 

     //bonus object 
     Bonus myBonus; 

     myBonus.calcAndDisplay(salesArray, rate); 

     endPgm(); 


    return 0; 
} 

// ***** getBonusRate function description ***** 
// 
double getBonusRate(double rate) 
{ 
    //display console title to user 
    cout << "JM SALES BONUS CALCULATOR\n\n"; 

    //get bonus rate from user 
    cout << "Enter bonus rate in decimal form: "; 
    cin >> rate; 
    cout << "\n\n"; 

    return rate; 
} 

// ***** columnsDashes function description ***** 
// 
void columnsDashes() 
{ 
    //display column headings and dashes to user 
    cout << "Number  Sales($)  Bonus($)\n"; 
    cout << "------  --------  --------\n"; 



} 

// ***** endPgm function description ***** 
// 
void endPgm() 
{ 
    //EOP message 
    cout << "\n\nEnd of Program."; 
} 

以上是CPP及以下.h文件

#ifndef CHAP1227_H_ 
#define CHAP1227_H_ 

#include <iostream> 
#include <fstream> 
#include <iomanip> 

using namespace std; 

// ***** CLASS DEFINITION ***** 
class Bonus 
{ 
    public: 
     Bonus(); 
     void calcAndDisplay(int salesArray[10][4], double rate); 

    private: 
     int totSales; 
     int grandTotSales; 
     double salesBonus; 
     double bonusGrandTot; 
}; 

// ***** CLASS IMPLEMENTATION ***** 
//default constructor 
Bonus::Bonus() 
{ 
    totSales = 0; 
    grandTotSales = 0; 
    salesBonus = 0.0; 
    bonusGrandTot = 0.0; 
} 

//calcAndDisplay function 
// 
void Bonus::calcAndDisplay(int salesArray[10][4], double rate) 
{ 

    for (int row = 0; row < 10; row += 1) 
     { 
      cout << row << "  "; 
      for (int column = 0; column < 4; column += 1) 
      { 
       totSales += salesArray[row][column]; 

       salesBonus = totSales * rate; 
       bonusGrandTot += salesBonus; 

      } 
      cout << totSales << "\n"; 
      grandTotSales += totSales; 
      totSales = 0; 

     } 
    cout << setprecision(2); 
    cout << salesBonus; 
    cout << grandTotSales << " " << bonusGrandTot; 
} 


#endif /* CHAP1227_H_ */ 
+0

见传递的价值,传递通过引用,以及如何获取回报论据的结果一个函数。 – LutzL

回答

0

这里的问题在于,您正在通过“按值调用”而不是“通过引用调用”传递'rate'变量。 要使其工作,你只需要重新定义你的getBonusRate功能之后,

double getBonusRate(double& rate) 
{ 
    //display console title to user 
    cout << "JM SALES BONUS CALCULATOR\n\n"; 

    //get bonus rate from user 
    cout << "Enter bonus rate in decimal form: "; 
    cin >> rate; 
    cout << "\n\n"; 

    return rate; 
} 

记住“&”符号则表示你是refrence通过你的速度变量。

对于由值随叫随到更多的细节,并通过引用调用,请检查下面,

https://www.tutorialspoint.com/cplusplus/cpp_function_call_by_value.htm https://www.tutorialspoint.com/cplusplus/cpp_function_call_by_reference.htm

0

事实上,“速度”是不是被填充,具有因您有多个变量称为“速度”。这就像有很多人称为“鲍勃”,“鲍勃史密斯”,“鲍勃琼斯”,“鲍勃汤普森”

getBonusRate()得到它自己的副本“率”,所以它的“getBonusRate :: rate”和主函数有它自己的“main :: rate”副本。编译器会看到这个全名,但是你的代码只能看到短名“rate”。

你的函数getBonusRate()有一个参数类型和一个返回类型。 这是一扇门,一扇门。你通过率,但它不出来。

要解决,你需要这样说:

outRate = getBonusRate(inRate); 

inRate被复制到getBonusRate()函数,该函数它的东西,那么它返回它回来了,您指定的值outRate。你可以重用/覆盖变量,所以你也可以这样做: inRate = getBonusRate(inRate);

+0

或者你也可以做什么shobi建议。他可能是更符合行业标准的方法(性能略快)。 Mine是教科书的解释(它解释了返回类型,并暗示了范围的概念)。 – NapkinTrout