2016-04-28 15 views
-2

でも、私はたくさん試しましたが、私のコードではどこにエラーがあるのか​​分かりません。それはとても簡単に思えます。エラー:適切なデフォルトのコンストラクタが使用できません

enum Suit { none, clubs, diamonds, hearts, spades }; 
enum Symbol { none_, ace, king, queen, jack, ten, nine, eight, seven }; 

class Card 
{ 
private: 
    Suit suit_; 
    Symbol symbol_; 

public: 

    Card(Suit suit, Symbol symbol) 
    { 
     suit_=suit; 
     symbol_=symbol; 
    }; 
+1

こんにちは。スタックオーバーフローへようこそ。周りを見て[ツアー]をし、[ヘルプセンター]を読んでください。あなたはまた、[質問]良い質問について読むことができます。 – Sampada

+0

エラーは何を正確に示し、どの行が間違っているかを示していますか? – immibis

+0

あなたのコードはコンパイルされず、リストされたエラーのためにコンパイルされません。コピーして+正しく貼り付けてもよろしいですか?詳細を追加する必要がある場合は、質問を編集することができます – Tas

答えて

0

あなたのクラスはdefault constructorを持っていません。それ自体は問題ではありません。ただし、存在しない場合はdefault constructorを呼び出すとエラーが表示されます。

Card x; 
std::vector<Card> v(3); 
auto x=std::make_shared<Card>(); 
//...and many others... 

ソリューション:あなたはおそらく他の場所でこのような何かをやって(これらの行の一つは、そのエラーをスローするのに十分ですか)?

実際にCardが引数を与えずに割り当てられることを望まない場合は、これを行うべきではありません。 Cardオブジェクトを割り当てて変更しようとしているコードを探します。デフォルト値を使用してCardクラスからオブジェクトを割り当てるとOKしている場合は、代わりにこれを追加し

class Card{ 
private: 
    Suit suit_; 
    Symbol symbol_; 
public: 
    Card()=delete; 
    Card(Suit suit, Symbol symbol) 
    { 
     suit_=suit; 
     symbol_=symbol; 
    } 
}; 

:ところで、次のように明確な声明でdeletedefault constructorに好ましい

class Card{ 
private: 
    Suit suit_; 
    Symbol symbol_; 
public: 
    Card()=default; 
    //Or Card():suit_(some_value),symbol_(somevalue){} 
    Card(Suit suit, Symbol symbol) 
    { 
     suit_=suit; 
     symbol_=symbol; 
    } 
}; 
+1

私はこの回答が気に入っていますが、これは十分ではないためOPの問題を解決できるかどうかを知っています情報が与えられた(関係なく、あなたの答えは役に立ちます)。そして、私は、デフォルトのコンストラクタが生成されなかったことを言及することはいいでしょう。 – Tas

0

あなたは定義されていますそのような場合、コンパイラはデフォルトのコンストラクタを追加しません。後述するように、あなたがオブジェクトを作成しようとしている場合は今後、あなたはありませんデフォルトコンストラクタエラーになってしまいます

card obj; //エラー

ソリューション:作成中

1)は、引数を渡します(スニペットの通りMost appropriate)目的:

例:

Suit suitenum = clubs; 
Symbol symnum = king; 
Card obj(suitenum,symnum); 

2)デフォルトコン定義構造体:

0

簡潔にするには、デフォルトのコンストラクタ(引数なし)を指定するだけです。

Card() 
{ 
} 

デフォルトのコンストラクタが必要な理由は、このタイプのベクター(コンテナ)を使用しているためです。 (クラス)。コンテナクラスの場合、含まれるクラス(カード)にはデフォルトコンストラクタが必要です。

関連する問題