【问题标题】:Dynamic array allocation during constructing object, invalid use of non-static variable构造对象时动态数组分配,非静态变量无效使用
【发布时间】:2014-10-13 12:27:22
【问题描述】:
class Array {                                           

public:

    Array(unsigned h, unsigned l, std::initializer_list<double>);
    ....
private:
    unsigned length;
    double * array;
...
};

Array::Array(unsigned l, std::initializer_list<double> il) :
length(l)
{
    array(new (std::nothrow) array[l]);
    if (!array)
        throw OutOfMem();
    for (auto el = il.begin(), int i = 0; i < length; i++)
    {
            if (el === il.end())
                throw WrongDim();
            array[i] = *el;
            el++;
        }
    }
}

这只是我必须为我的作业做的原始课程的草稿。编译出错:

非静态数据成员“长度”的使用无效 无符号长度;

有人知道如何解决这个问题吗?

【问题讨论】:

  • 那里的代码非常混乱。您在ctor定义中缺少h,因此编译器可能不会将其解析为ctor,而是有些奇怪。其次,array 的初始化可能也应该在 mem-initializer-list 中,您的意思可能是new (std::nothrow) double[l]
  • 当您发布有关错误的问题时,请始终在问题中包含完整的错误日志,并标出错误的来源。
  • 完整的错误日志包含超过 6 页,据我观察,其中大部分是错误分配的结果。这就是我问这件事的原因。问题是我不知道为什么即使很难我总是必须初始化那些我不能使用它们在构造对象中分配动态数组的值

标签: c++ arrays dynamic allocation


【解决方案1】:

怎么样:

int i=0;
for (auto &el : il)
    array[i++] = el;

if (i!=l) 
    throw WrongDim();

【讨论】:

  • 请解释此代码如何帮助 OP 和该线程的其他读者解决问题。您可以在help centerHow to Answer 中找到有关回答指南的更多信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 2016-11-16
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 2021-12-02
相关资源
最近更新 更多