Cannote创建对象,构造函数错误(用于对象初始化)
问题描述:
我为std::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()’`
似乎操作员有一些问题。我确实试图创建一个运算符超载,但在我的尝试失败。
错误原因是什么?
答
您没有为Stack
指定默认构造函数,因此无法创建变量myStack
。
通常,默认构造函数是隐式的,但在您的情况下,因为您指定了复制构造函数,所以它将被删除。
要么自己实现它,或者明确地默认情况下它:
Stack() = default; // Default implementation of default constructor
答
您的Stack类缺少默认构造函数。
有没有涉案运营商?你只是错过了指定一个默认的构造函数。如果定义了复制构造函数,编译器将不会自动生成一个。 –