Cannote创建一个对象,构造函数错误(用于对象初始化)

时间:2016-10-18 18:51:26

标签: c++ class default-constructor

我为std::stack创建了一个Stack扩展。

我创建了一个模板类,其代码在这里:

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;
    }

但是当我初始化它时:

Stack<int> myStack;

它会抛出以下错误:

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

似乎运营商存在一些问题。我确实试图创建一个运算符重载但在尝试时失败了。

错误的原因是什么?

2 个答案:

答案 0 :(得分:3)

您没有为Stack指定默认构造函数,因此无法创建变量myStack

通常,默认构造函数是隐式的,但在您的情况下,因为您指定了复制构造函数,所以它将被删除。

要么自己实现,要么明确默认:

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

答案 1 :(得分:1)

您的Stack类缺少默认构造函数。