C++ 无法创建对象,构造函数错误(用于对象初始化)

C++ 无法创建对象,构造函数错误(用于对象初始化),c++,class,default-constructor,C++,Class,Default Constructor,我已经为std::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

我已经为
std::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;
    }
模板
类堆栈
{
std::堆栈数据容器;
可变std::mutexm;
公众:
堆栈(常量堆栈和其他)
{
标准:锁和防护锁(其他M);
此->数据\u容器=其他.data\u容器;
}
但当我初始化它时:

Stack<int> myStack;
Stack myStack;
它抛出以下错误:

 error: no matching function for call to `‘Stack<int>::Stack()’`
错误:调用`'Stack::Stack()'没有匹配的函数`
运算符似乎有一些问题。我确实尝试创建运算符重载,但尝试失败


错误原因是什么?

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

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

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

要么自己实现,要么显式默认:

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

没有涉及运算符??您只是没有指定默认构造函数。如果定义了复制构造函数,编译器将不会自动生成一个。