【问题标题】:Cannote create an object, constructor error (for object initialization) [duplicate]无法创建对象,构造函数错误(用于对象初始化)[重复]
【发布时间】:2016-10-18 18:51:26
【问题描述】:

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

但是当我初始化它时:

Stack<int> myStack;

它会抛出以下错误:

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

运营商好像有问题。我确实尝试过创建运算符重载,但尝试失败。

错误的原因是什么?

【问题讨论】:

  • 没有运营商参与??您只是错过了指定默认构造函数。如果定义了复制构造函数,编译器不会自动生成一个。

标签: c++ class default-constructor


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-10-30
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      相关资源
      最近更新 更多