0

おそらくここのどこかに答えがあるので、これを聞いて申し訳ありませんが、これまでの検索は無駄でした.

パラメーター化されたコンストラクターを使用すると、クラス オブジェクトを出力関数に渡すことができ、すべて問題ありません。デフォルトのコンストラクターを使用すると、次のように失敗します。

1>c:\<path>\project_04.cpp(152): error C2664: 'printCheck' : cannot convert parameter 1 from 'AdamsEmployee (__cdecl *)(void)' to 'AdamsEmployee'
1>          No constructor could take the source type, or constructor overload resolution was ambiguous

オブジェクトを出力関数に渡そうとしたときのオブジェクトのマウスオーバーには、次のように表示されます。

Error: No suitable constructor exists to convert from "AdamsEmployee ()" to "AdamsEmployee"

これが私のデフォルトのコンストラクタです:

AdamsEmployee::AdamsEmployee()
{
    AdamsEmployee::employeeNumber = -1;
    AdamsEmployee::employeeName = "";
    AdamsEmployee::employeeAddress = "";
    AdamsEmployee::employeePhone = "";
    AdamsEmployee::employeeHourlyWage = 0.0;
    AdamsEmployee::employeeHoursWorked = 0.0;
}

ここに私のパラメータ化されたコンストラクタがあります:

AdamsEmployee::AdamsEmployee(int employeeNumber, string employeeName, string
employeeAddress, string employeePhone, double employeeHourlyWage,
doubleemployeeHoursWorked )
{
    AdamsEmployee::employeeNumber = employeeNumber;
    AdamsEmployee::employeeName = employeeName;
    AdamsEmployee::employeeAddress = employeeAddress;
    AdamsEmployee::employeePhone = employeePhone;
    AdamsEmployee::employeeHourlyWage = employeeHourlyWage;
    AdamsEmployee::employeeHoursWorked = employeeHoursWorked;
}

出力を呼び出す行:

printCheck( emp1 );

出力関数:

void printCheck( AdamsEmployee employee )
{
// Display the mock paycheck.
cout << "----------------------------------H&H Systems----------------------------------" << endl;
cout << "\nPay to the order of " << employee.getName() << ".....$" << employee.calcPay() << endl;
// Display the simulated paystub.
cout << "\nGoliath National Bank" << endl;
cout << "-------------------------------------------------------------------------------" << endl;
cout << "Hours worked: " << employee.getHoursWorked() << endl;
cout << "Hourly wage: " << employee.getWage() << endl;
} // End printCheck()

パラメータを追加すると、すべてが機能します。検索すると、当てはまらないと思われる多くの状況が返されます。さらに情報が必要ですか?

私は何を間違っていますか?

編集:すべての助けをありがとう!

4

2 に答える 2

2

エラーは、宣言されているかのように、関数を渡していることを示していますAdamsEmployee emp1()。あるコメントが言及しているように、これはおそらく解析のあいまいさが原因です。それは非常に一般的であり、それには完全なstackoverflowタグがあります:https://stackoverflow.com/questions/tagged/most-vexing-parse

于 2013-09-22T05:20:16.703 に答える
0

おそらく、デフォルト コンストラクターのクラスにコンストラクターの宣言がありません。

于 2013-09-22T05:30:20.863 に答える