@sooota

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

独習c++の練習問題5.2

Q&A

Closed

解決したいこと

独習c++という本でvisualstudio2022を使用して学習しているのですが、ある問題で解答と同じようにプログラムを書いてもエラーが出てしまいます
練習問題5.2の1問目でコンパイルできるようにクラスを修正するというものなのですが、解答の通りNSDMIを使用して初期値を代入しても "コンストラクター "product::product" のインスタンスが引数リストと一致しません" とエラーが出ます 該当するソースコードは解答の通りに記述したものです

解答は出版社サイトの付属データからdlできます https://www.shoeisha.co.jp/book/detail/9784798150239

該当するソースコード

//visualstudio2022, c++17

#include

class product

{

int			id = 0;

std::string name = "no availabe";

int			price = 0;  // 問題のコードではメンバー変数がNSDMIで初期化されていません

public:

explicit product(int id, std::string name, int price) 
	: id(id), name(name), price(price) {}

};

int main()

{

product p[4] =

{

	product{1, "smart phone", 60000},

	product{2, "tablet", 35000},

};

}

自分で試したこと

デフォルトコンストラクタを宣言定義したところエラーは出ませんでした 恐らく解答が間違っているのではないかと

0 likes

2Answer

せっかくのコードが、細切れになってしまって、非常に見づらいです。

↓こちらのリンクにコードブロックの書き方の説明があるので、修正されることをお勧めします。

1Like

Comments

  1. 多分、↓この行が問題です。

    - product p[4] =
    + product p[] =
      {
    
      	product{1, "smart phone", 60000},
    
      	product{2, "tablet", 35000},
    
      };
    
  2. @sooota

    Questioner

    確かにp[]にするとコンパイルできました 恐らく誤植なので出版に問い合わせてみます ありがとうございました

二つ問題があります。
1.配列は4つを宣言して、実は二つしかありません。修正方法は、product p[4]product p[2]に変更するかまたはproduct p[]に変更します。
2.2番目のオブジェクトproduct{2, "tablet", 35000},のあとに”,”があります。これはまた後ろに配列のオブジェクトがあるという意味です。

product p[4] =

{

	product{1, "smart phone", 60000},

	product{2, "tablet", 35000},

};
1Like

Comments

  1. 横から失礼します。

    @EdgeDevice さん、

    2.2番目のオブジェクトproduct{2, "tablet", 35000},のあとに”,”があります。これはまた後ろに配列のオブジェクトがあるという意味です。

    この指摘は誤りです。
    最後の冗長なカンマ,は、CやC++言語仕様で認められた使い方です。コンパイルも普通に通ります。

Your answer might help someone💌