无法将'(<​​表达式错误=“”>)从'<brace-enclosed initializer =“”list =“”>'转换为std :: unique_ptr <int [] =“”>

时间:2016-09-23 02:24:28

标签: c++ gcc c++14

我有最新的gcc编译器。 gcc(Ubuntu 6.2.0-3ubuntu11~14.04)6.2.0

在code :: blocks上我将编译器设置为GNU编译器默认。

我得到的错误就是这个

  

错误:无法将{<expression error>}<brace-enclosed initializer list>转换为std::unique_ptr<int []>

问题出在我头部的头文件中。

这是我在课堂上做的一个实验室,上周工作正常我认为 - 编译头文件给了我我的结果但是当我从arrayclass.cpp文件构建时它给了我这个错误。

这是我的实现文件ArrayClass.cpp:

#include "ArrayClass.h"

#include <memory>

using std::make_unique;

ArrayClass::ArrayClass(int capacity)
  : arrSize{capacity},
    arr{make_unique<int[]>(capacity)}
{
}

void ArrayClass::insert(int value)
{
    if (currentSize < arrSize) {
        arr[currentSize++] =  value;
    }
}

void ArrayClass::set(int i, int value)
{
    if (i >= 0 && i < currentSize) {
        arr[i] =  value;
    }
}

int ArrayClass::get(int i) const
{
    if (i >= 0 && i < currentSize) {
        return arr[i];
    }
    else {
        return 0;
    }
}

int ArrayClass::capacity() const
{
    return arrSize;
}

int ArrayClass::size() const
{
    return currentSize;
}

这是我的头文件:

#ifndef ArrayClass_header
#define ArrayClass_header
#include <memory>

using std::unique_ptr;
using std::make_unique;

class ArrayClass
{
public:
    // Constructors and Destructors

    // Default constructor
    // POST: Created an ArrayClass object with an array of size def_size
    // Compiler default suffices (see variable initializations at end of header)
    ArrayClass() = default;

    // Constructor
    // PRE: capacity > 0
    // POST: Created an ArrayClass object with an array of size capacity
    // PARAM: capacity = size of the array to allocate
    ArrayClass(int capacity);

    // Destructor
    // POST: All dynamic memory associated with object de-allocated
  //  ~ArrayClass();

    // Set the value of the next free element
    // PRE: currentSize < arraySize
    // POST: Element at index currentSize set to value
    // PARAM: value = value to be set
    void insert(int value);

    // Return an element's value
    // PRE: 0 <= i < arraySize
    // POST: Returned the value at index i
    // PARAM: i = index of value to be returned
    int get(int i) const;

    // Set an element's value
    // PRE: 0 <= i < arraySize
    // POST: Element at index i set to value
    // PARAM: i = index of element to be changed
    //        value = value to be set
    void set(int i, int value);

    // POST: Return the currently allocated space
    int capacity() const;

    // POST: Return the number of elements
    int size() const;

    // The default capacity
    static constexpr int def_capacity {10};

private:
    int arrSize {def_capacity};
    int currentSize {0};
    unique_ptr<int[]> arr {make_unique<int[]>(capacity)};
};

#endif

1 个答案:

答案 0 :(得分:2)

我很确定错误在这里:

Table.Column

unique_ptr<int[]> arr {make_unique<int[]>(capacity)}; 应该是capacity,因为到目前为止,您使用的是函数名但没有圆括号,这会使编译器在解析{{1}时遇到麻烦初始化列表。

编辑:是的,它可以很好地修复。有两个错误,第一个是&#34; 无效使用非静态成员函数 def_capacity&#34;。然后是初始化列表,因为编译器无法解析初始化列表。

编辑2 :在{}文件中,在构造函数定义中,int ArrayClass::capacity() const似乎隐藏了.cpp函数,但我仍然认为它是&#39 ;为了清楚起见,最好避免这种碰撞。