我为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()’`
似乎运营商存在一些问题。我确实试图创建一个运算符重载但在尝试时失败了。
错误的原因是什么?
答案 0 :(得分:3)
您没有为Stack
指定默认构造函数,因此无法创建变量myStack
。
通常,默认构造函数是隐式的,但在您的情况下,因为您指定了复制构造函数,所以它将被删除。
要么自己实现,要么明确默认:
Stack() = default; // Default implementation of default constructor
答案 1 :(得分:1)
您的Stack类缺少默认构造函数。