私は現在 C++ を学んでおり、「C++ Primer 5th Edition」を読んでいます。コンストラクターについて学び始めたばかりで、理解できない問題が少しあります。
#ifndef SALES_DATA_H
#define SALES_DATA_H
#include <string>
struct Sales_data
{
//default constructor
Sales_data(const std::string &s, unsigned n, double p):
bookNo(s), units_sold(n), revenue(p*n) { }
//new members: operations on Sales_data objects
std::string isbn() const { return bookNo; }
Sales_data& combine(const Sales_data&);
double avg_price() const;
//data members
std::string bookNo;
unsigned units_sold;
double revenue;
};
私が書いたデフォルトのコンストラクターが正しいと確信しています (それが本に書かれているものであることを考慮して) が、明らかにここに何かが欠けています。構文エラーなどは表示されず、すべての組み込みメンバーが初期化されているため、何が問題なのかわかりません。
編集 :
エラーが発生したのはヘッダーファイルではなく、実際にはソースファイルであることがわかりました。次のような Sales_data オブジェクトを作成すると:
Sales_data total;
「適切なデフォルトコンストラクターがありません」というエラーが表示されます。著者がデフォルトのコンストラクターを記述するための 3 つの方法を提供したことを考えると、何が問題なのかまだわかりません。これらは次のとおりです。
struct Sales_data {
// constructors added
Sales_data() = default; //Number 1
Sales_data(const std::string &s): bookNo(s) { } //Number 2
Sales_data(const std::string &s, unsigned n, double p): //Number 3
bookNo(s), units_sold(n), revenue(p*n) { }
それらがデフォルトのコンストラクターでない場合、正確には何ですか/その目的は何ですか?