如何通过构造函数初始化数组? 以下是名为Sort的类的代码:
private:
double unpartitionedList[];
public:
Sort(double unpartitionedList[]);
Sort::Sort(double unpartitionedList[])
{
this->unpartitionedList = unpartitionedList;
}
我希望能够将数组传递给构造函数并将其存储在unpartitionedList[]
中。像这样:Sort(array[])
由于代码现在,我在DevC ++中遇到编译器错误:
“[错误]将'double *'赋值给'double [0]'”时出现不兼容的类型
我尝试在我认为需要的位置插入引用(&
)和解除引用(*
)运算符,但不幸的是,我的尝试都没有成功。
任何建议都将不胜感激。
答案 0 :(得分:4)
阵列不可分配。您必须执行元素复制或编写实际的C ++代码并使用std::array
或std::vector
。
答案 1 :(得分:2)
class Sort
{
private:
double unpartitionedList[];
public:
Sort(double unpartitionedList[]);
};
Sort::Sort(double unpartitionedList[])
{
this->unpartitionedList = unpartitionedList;
}
该代码无法编译,因为数组不可分配。您可以通过几种不同的方式实现目标(取决于您未提及的要求)。
方法1:手动内存管理
class Sort
{
private:
double* unpartitionedList;
std::size_t _size;
public:
Sort(double* upl, std::size_t n);
};
Sort::Sort(double* upl, std::size_t n) : unpartitionedList(upl), _size(n)
{
}
这里有一些注意事项:如果你打算让这个类获取内存的所有权,你必须正确地管理它(例如释放析构函数中的内存,并提供一个适当的拷贝构造函数,执行深层复制)。由于内存管理要求,如果不是绝对必要,建议不要使用此方法。
方法2/3:STD容器
class Sort
{
private:
std::vector<double> _upl;
// or
// std::array<double, SIZE> upl; // with a constant SIZE defined
public:
Sort(const std::vector<double>& upl);
};
Sort::Sort(const std::vector<double>& upl) : _upl(upl)
// Sort::Sort(const std::array<double, SIZE>& upl) : _upl(upl)
{
}
这将删除内存管理要求。 std::vector
将允许您在运行时调整数组大小。 std::array
是一个围绕C风格数组的瘦包装器(必须在编译时调整大小)。