gpt4 book ai didi

c++ - 无法将 '()' 从 '' 转换为 std::unique_ptr

转载 作者:行者123 更新时间:2023-11-28 02:00:50 25 4
gpt4 key购买 nike

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

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

我得到的错误是这个

error: could not convert {<expression error>} from <brace-enclosed initializer list> to 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

最佳答案

我很确定错误在这里:

unique_ptr<int[]> arr {make_unique<int[]>(capacity)};

capacity 应该改为 def_capacity,因为到目前为止,您使用的是函数名称但没有圆括号,这会使编译器在解析时出错{} 初始化程序列表。

编辑:是的,它可以通过修复正常编译。有两个错误,第一个是“无效使用非静态成员函数 int ArrayClass::capacity() const”。然后是初始化列表,因为编译器无法解析初始化列表。

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

关于c++ - 无法将 '(<expression error>)' 从 '<brace-enclosed initializer list>' 转换为 std::unique_ptr<int []>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39651609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com