无法创建对象,构造函数错误(用于对象初始化)
Cannote create an object, constructor error (for object initialization)
我已经为 std::stack
创建了一个 Stack 扩展。
我创建了一个模板class,其代码在这里:
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()’`
操作员好像有点问题。我确实尝试创建一个运算符重载,但我的尝试失败了。
错误原因是什么?
您的 Stack class 缺少默认构造函数。
您没有为 Stack
指定默认构造函数,因此无法创建变量 myStack
。
通常情况下,默认构造函数是隐式的,但在您的情况下,因为您指定了复制构造函数,所以它被删除了。
要么自己实现,要么显式默认:
Stack() = default; // Default implementation of default constructor
我已经为 std::stack
创建了一个 Stack 扩展。
我创建了一个模板class,其代码在这里:
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()’`
操作员好像有点问题。我确实尝试创建一个运算符重载,但我的尝试失败了。
错误原因是什么?
您的 Stack class 缺少默认构造函数。
您没有为 Stack
指定默认构造函数,因此无法创建变量 myStack
。
通常情况下,默认构造函数是隐式的,但在您的情况下,因为您指定了复制构造函数,所以它被删除了。
要么自己实现,要么显式默认:
Stack() = default; // Default implementation of default constructor