0

我正在编写这个基本程序并且被卡住了。我是 C++ 新手。我的程序必须 为各种罪行计算罚款。它将通过以下方式实现:

  1. 用户将输入实际速度、限速、违法行为是否发生在工作区/住宅区/以及法庭费用

  2. 显示票的总金额

  3. 提示用户是否希望输入另一张票或退出

这是预期输出的示例:

超速
罚款:超过限速每英里 5 美元加上法庭费用

超速高速公路工作区
罚款:超过限速每英里 6 美元,另加法庭费用

在住宅区超速
罚款:超过限速每英里 7 美元外加 200 美元外加法庭费用

这是代码:

#include <iostream>

class FineCalculator
{
public:
    ~FineCalculator() {}
    FineCalculator(int courtFees); 
    int getFine(int zone, int speedLimit, int actualSpeed) const;

private:
  int courtFees;
  int balance;
};


FineCalculator::FineCalculator(int courtFees)
{
    //return courtFees;
}

int getFine(int zone, int speedLimit, int actualSpeed) 
{
    //define IF you are speeding or not

    if (actualSpeed > speedLimit)
    {

        /* define speeding zones
           1. Regular
           2. Highway
           3. Residential
         */

        if (zone==1)
        {
            int balanceCounter=actualSpeed-speedLimit;

        //balance=courtfees+(loopcounter*5)
        //balance
        }

    }

    return 0;
}

int main()
{
    int courtFee=0;
    int inputFee=0;
    int accumulator=0;
    int programLooper=1; 
    int speedLimitz=0;
    int vechicleSpeed=0;

    std::cout<<"Please enter the court fee $";
    std::cin >>courtFee;

    FineCalculator fine1(courtFee);

    while (programLooper !=0)
    {
        //1 for regular, 2 for highway, 3 for residential
        //loop selection of offenses
        std::cout<<"Please make numerical  ticket selection for where the offense occured: \n";
        std::cout<<"1. Regular \n";
        std::cout<<"2. Highway \n";
        std::cout<<"3. Residential \n";
        std::cin >>programLooper;

        std::cout<<"\n \n \n";
        std::cout<<"Please Enter the speed limit \n";
        std::cin >>speedLimitz;

        std::cout<<"\n \n \n";
        std::cout<<"Please Enter the vechile speed  \n";
        std::cin >>vechicleSpeed;

        fine1.getFine(programLooper,speedLimitz,vechicleSpeed);
    }

    if (programLooper==0)
    {
        //end program loop
        return (0);
    }
}

对于该FineCalculator::FineCalculator(int courtFees)方法的初学者,我不确定在 return 中输入什么,因为 return 之后我输入的任何内容都会出错。

同样在fine1.getFine(programLooper,speedLimitz,vechicleSpeed);我收到一个错误消息:

Error   2   error LNK1120: 1 unresolved externals   

Error   1   error LNK2019: unresolved external symbol "public: int __thiscall FineCalculator::getFine(int,int,int)const " (?getFine@FineCalculator@@QBEHHHH@Z) referenced in function _main 

这里发生了什么?我完全被难住了。

4

5 回答 5

0

我认为您需要删除以下中的“常量”:

int getFine(int zone, int speedLimit, int actualSpeed) const;
于 2013-09-08T11:37:05.793 回答
0

class FineCalculator中,您声明getFine了方法 const,但您在没有 const 的情况下定义了它。要修复链接错误,您需要将声明和定义都设为 const 或非常量。

于 2013-09-08T11:51:05.283 回答
0

当您像这样定义函数时:

int getFine(int zone, int speedLimit, int actualSpeed)
{ ... }

您正在定义一个普通函数,而不是您的类的一部分-这是合法的,但不是您想要的。

要定义getFine您在类中声明的,您需要:

int FineCalculator::getFine(int zone, int speedLimit, int actualSpeed) const
{ ... }

(这FineCalculator::是关键。您还需要最终的 const 来匹配您声明它的方式。)

此外,对于您的第一个问题,您不能从FineCalculator::FineCalculator. 但是你不需要——它的工作是构造一个FineCalculator你可以使用的对象,例如通过调用getFine它。

于 2013-09-08T11:52:20.650 回答
0

编译器和链接器都需要知道成员函数是否为const.
因此,不仅在声明函数时它应该是合格的,而且在定义它时也是如此。

此外,在定义范围时未解析范围,请使用范围解析运算符::指示它属于该类。

于 2013-09-08T11:52:57.653 回答
0

是的,需要删除 const 。将 getfine 声明为 const 的动机是什么,因为无论如何您都在修改对象?

于 2013-09-08T11:55:03.087 回答