2017-06-08 5 views
-2

マイC++プログラムは次のエラーが発生している:注:候補者:MyClassの:私はそれを保存するときのMyClass(のconst MyClassの&)エラー

hw.cpp|10 col 7 error| note: candidate: Category::Category(const Category&) [cpp/gcc] 
hw.cpp|10 col 7 error| note: candidate expects 1 argument, 0 provided [cpp/gcc] 
hw.cpp|14 col 9 error| note: candidate: Category::Category(std::__cxx11::string) [cpp/gcc] 
hw.cpp|14 col 9 error| note: candidate expects 1 argument, 0 provided [cpp/gcc] 
hw.cpp|36 col 9 error| no matching function for call to ‘Category::Category()’ [cpp/gcc] 
hw.cpp|39 col 51 error| cannot call constructor ‘Category::Category’ directly [-fpermissive] [cpp/gcc] 
hw.cpp|39 col 51 error| note: for a function-style cast, remove the redundant ‘::Category’ [cpp/gcc] 

私のコードは次のとおりです。

私の中に間違って何
class Category { 
    private: 
     string name; 
    public: 
     Category(string _name) 
     { 
      name = _name; 
     } 

     string getCategory() 
     { 
      return name; 
     } 
     void setCategory(string _name) 
     { 
      name = _name; 
     } 
}; 

class Book { 
    private: 
     string name; 
     string author; 
     Category category; 
    public: 
     Book(string _name, string _author, string _category) 
     { 
      name = _name; 
      author = _author; 
      category = Category::Category(_category); 
     } 
     Category getCategory() 
     { 
      return category; 
     } 

     void setCategory(string _name) 
     { 
      category.setCategory(_name); 
     } 
     string getName() 
     { 
      return name; 
     } 
     void setName(string _name) 
     { 
      name = _name; 
     } 

     string getAuthor() 
     { 
      return author; 
     } 
     void setAuthor(string _author) 
     { 
      author = _author; 
     } 
}; 

コード?どうすれば修正できますか?

+0

カテゴリ::カテゴリ(_category); ' - >カテゴリ(_category);'コンストラクタは静的関数ではありません。それは*文字通り*あなたに言った: '冗長な削除 ':: Category''あなたのエラーメッセージを読んでください。 – Borgleader

+0

Bodyではなく、 'Book'コンストラクタ初期化子リストで' Category'メンバを初期化する必要があります。 –

答えて

2

問題はここにある:最後の行で

Book(string _name, string _author, string _category) 
    { 
     name = _name; 
     author = _author; 
     category = Category::Category(_category); 
    } 

ルック。その行が実行される前に、categoryにはどのような価値があると思いますか? categoryを最初に建設して、ここに新しい価値を与えることができるとどう思いますか?

どのように修正するかは、何をしたいかによって異なります。イニシャライザーリストを使用することができます。デフォルトコンストラクタを使用できます。

+0

私はC++で非常に新しくなっていますが、 'category'がその行までnullであることを期待しています。デフォルトのコンストラクタを使うのは、' category'に定義する前に新しい 'Category'インスタンスを作成することです。プロパティを設定し、カテゴリ名を 'category'プロパティに設定しますか? – Lai32290

+0

@ Lai32290変数 'category'は、クラスである' Category'型です。クラスのインスタンスはどのように 'null 'の値を持つことができますか? (ポインタは 'null'の値を持ちますが、' category'はポインタではありません。 'Category'です。)' category'はクラスのインスタンスなので、クラスのインスタンスを呼び出すことによって生まれなければなりませんそのクラスのコンストラクタです。該当するコンストラクタがありません。 –

+0

'category = Category :: Category(_category);'行は 'Category'クラスの新しいインスタンスを作成し、' category'クラスの既存のインスタンス( 'category')をその新しいインスタンスの値に設定します新しいインスタンスを破壊する前につまり、 'category'は、その行の前に' Category'クラスのインスタンスに合法な値を持たなければならず、新しいクラスインスタンスを作成して破壊するだけです。それはおそらくあなたが望むものではありません。おそらく、最初の場所で適切な値で 'category'を作成する初期化子リストが必要でした。 –

関連する問題