私はBill
というクラスを持っています。クラスのプロパティの中には、int
のcategory
と呼ばれるものがあります。 請求書を印刷するときには、番号ではなくカテゴリの名前が表示されます。だから私は、対応する文字列にcategory
整数に変換するために、この静的なヘルパー関数を書きました:C++オーバーロード演算子<<静的ヘルパーメソッドを使用してアクセス違反エラーを作成する
// Takes an integer representing the category and returns its corresponding name
static const std::string& getCategoryByNumber(int category)
{
switch (category)
{
case 1:
return "Food";
case 2:
return "Gift";
case 3:
return "Fuel";
case 4:
return "Electricity";
case 5:
return "Clothes";
case 6:
return "Holidays";
case 7:
return "Water";
case 8:
return "Fees";
default:
exit(1);
}
}
は今、私はこのようなBill
クラス定義のoperator<<
外をオーバーロードしようとした:
std::ostream& operator<<(std::ostream& os, Bill& bill) {
int category = bill.getCategory();
const std::string& nameOfCategory = getCategoryByNumber(category);
std::cout << nameOfCategory.c_str();
return os;
}
bill型のオブジェクトを作成し、このコード行を実行すると、エラーが発生します。 cout << billObject;
これで十分ではない情報があれば、私はもっと喜んで追加します。 このエラーを解決するにはどうすればよいですか?
'のstd ::文字列&を回復する機会を与えるために、' - >は 'のstd :: STRING' – Geoff
、このような問題を解決するための適切なツールですあなたのデバッガ。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。少なくとも、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、デバッガでの観察結果を含めるように質問を編集する必要があります。 –
@πάνταῥεscreensあなたがスクリーンショットを見ると、私は実際にプログラムをデバッグしています:) –