2016-10-18 8 views
-2

std::stackのStack拡張を作成しました。Cannoteオブジェクトを作成します。コンストラクタエラー(オブジェクト初期化用)

template<class _StackType> 
class Stack 
{ 
    std::stack<_StackType> data_container; 
    mutable std::mutex M; 
public : 

    Stack(const Stack& other) 
    { 
     std::lock_guard<std::mutex> lock(other.M); 
     this->data_container = other.data_container; 
    } 

しかし、私はそれを初期化する場合:

私は、コードテンプレートクラスを作成している

はここにある

error: no matching function for call to `‘Stack<int>::Stack()’` 

は、それはそう:

​​

それは次のようなエラーがスローされますオペレータにはいくつかの問題があります。私は演算子のオーバーロードを作成しようとしましたが、私の試みでは失敗しました。

エラーの原因を教えてください。

+0

?単にデフォルトのコンストラクタを指定していなかっただけです。コピーコンストラクタが定義されている場合、コンパイラは自動的にコンストラクタを生成しません。 –

答えて

3

Stackにデフォルトコンストラクタを指定していないため、変数myStackを作成できません。

通常、デフォルトのコンストラクタは暗黙的ですが、コピーコンストラクタを指定したため、その場合は削除されます。

どちらかそれを自分で実装するか、明示的にデフォルト:関与なしオペレータはありません

Stack() = default; // Default implementation of default constructor 
1

あなたのスタッククラスにはデフォルトコンストラクタがありません。

関連する問題