1

こんにちは、私はプログラミングに非常に慣れていません。このプログラムでは、関数を使用して誰かの月額料金を計算できるはずです。コンパイルするときは問題ありませんが、デバッグしようとすると失敗したと表示されるため、何が間違っているのかわかりません。これが私のコードです:

//このプログラムは、ユーザーの月額料金を計算します

#include <iostream>
#include <iomanip>

using namespace std;

//function prototypes
void showpackage();
void calculatePkg_A (int,int,int);
void calculatePkg_B (int,int,int);
void calculatePkg_C (int,int,int);


int main ()
{
    int inputPackage; //package choice
    double inputHours; //number of hours


    //constants for package choice
    const int pkg_A = '1' ,
               pkg_B = '2',
               pkg_C = '3';
     const char quit_choice = 'Q' || 'q';
    //constants for cost of package
    const int cost_A = 15,
              cost_B = 20,
              cost_C = 25;
    //constants for package access time
    const int hours_A = 50,
              hours_B = 100,
              hours_C = 150;
    cout << fixed << showpoint << setprecision (2);
    do
    { //display package options. 
        showpackage();
        cin >> inputPackage;

        //validate package selection
        while (inputPackage < pkg_A || inputPackage > pkg_C || inputPackage != quit_choice )
        {
            cout << "Please enter a valid package choice:";
            cin >> inputPackage;
        }
        //If user does not want to quit, proceed.
if (inputHours < 0 || inputHours > 720 || inputPackage != quit_choice)
        {
            //get the number of hours used
            cout << "How many hours were used?";
            cin >> inputHours;

                //display the total charges
                switch (inputPackage)
                {
                case pkg_A:
                    calculatePkg_A (cost_A, hours_A, inputHours);
                    break;
                case pkg_B:
                    calculatePkg_B (cost_B, hours_B, inputHours);
                    break;
                case pkg_C:
                    calculatePkg_C (cost_C, hours_C, inputHours);
                    break;
                }
            }
    } while (inputPackage != quit_choice);


            return 0;
}


//definition of function showPackage which displays package options

void showPackage()
{cout <<"An Internet service provider has three different packages for its customers: \n"
<<"1.Package A: For $15 per month with 50 Hours of access provided, additional hours \n"
<<"are $2.00 per hour over 50 hours.\n"
<<"2.Package B: For $20 per month with 100 Hours of access provided, additional hours \n"
<<"are $1.50 per hour over 100 hours.\n"
<<"3.Package C: For $25 per month with 150 Hours of access provided, additional hours \n"
<<"are $1.00 per hour over 150 hours.\n"
<<"Enter your choice either 1,2, or 3:";
}

//defintion of function calculatePkg_A. Displays total charges.


void calculatePkg_A (int cost_A, int hours_A, int inputHours)
    {
        cout << "The total charges are $"
             << (cost_A += (inputHours - hours_A) * 2) << endl;
}

//
//defintion of function calculatePkg_B. Displays total charges.
//

void calculatePkg_B (int cost_B, int hours_B, int inputHours)
    {
        cout << "The total charges are $"
             << (cost_B += (inputHours - hours_B) * 1.5) << endl;
}

//defintion of function calculatePkg_C. Displays total charges.


void calculatePkg_C (int cost_C, int hours_C, int inputHours)
    {
        cout << "The total charges are $"
             << (cost_C += (inputHours - hours_C)) << endl;
}

しかし、デバッグしようとするたびに、エラーメッセージが表示され続けます:

1>Program5.obj : error LNK2019: unresolved external symbol "void __cdecl calculatePkg_C(double,double,double)" (?calculatePkg_C@@YAXNNN@Z) referenced in function _main
1>Program5.obj : error LNK2019: unresolved external symbol "void __cdecl showpackage(void)" (?showpackage@@YAXXZ) referenced in function _main
    1>C:\Users\charlotte\Desktop\program5\Debug\program5.exe : fatal error LNK1120: 2 unresolved externals 
4

4 に答える 4

1

エラー メッセージは、 を宣言しcalculatePkg_C(double,double,double)たが実装したことを示していますcalculatePkg_C(int,int,int)。定義のプロトタイプを変更すると、機能するはずです。また、このプロトタイプを持つ関数が宣言されている場所を探します。

于 2012-10-14T20:46:56.867 に答える
1

double最初のエラーは、型をに渡す必要があるとコンパイラが判断したことですcalculatePkg_C。以下が期待されます。

calculatePkg_C(double,double,double)

しかし、あなたのものは:

calculatePkg_C(int,int,int)

これがなぜなのかを自問する必要があります。上で宣言し、下で正しく定義しました。見せていないものはありますか?私はあなたが通過inputHoursしていることに気付きましたdouble. としてキャストしてみてくださいint

他のエラーはshowPackage. 宣言 (および使用法) の大文字と小文字が間違っています。

于 2012-10-14T20:49:52.963 に答える
0

プロトタイプで 3 つの int パラメーターを取るとして 3 つの関数を宣言することをお勧めします。

void calculatePkg_A (int,int,int);
void calculatePkg_B (int,int,int);
void calculatePkg_C (int,int,int);

ただし、次のように宣言しているため、3 番目のパラメーターとして必ず double を渡します。

double inputHours; //number of hours

ここではキャストをお勧めしません。関数のプロトタイプを保持する必要がある場合は、整数として宣言することをお勧めします。

showpackage の実​​装では、C/C++ には大文字と小文字が区別される構文があることに注意してください。したがって、次のように記述する必要があります。

//definition of function showPackage which displays package options

void showPackage()
{
...
}
于 2013-12-21T13:08:36.983 に答える
0

ビルド タイプごとにビルド プロパティを調べる必要があります。caclulatePkg_C()andメソッドを含むソース ファイルshowpackage()はリリース構成にありますが、デバッグ構成にはありません。

于 2012-10-14T20:43:29.933 に答える