簡體   English   中英

可能無法初始化可變大小的對象

[英]variable-sized object may not be initialized

我有這樣的課

class aClass
{
  public:
    aClass() : N(5) {}
    void aMemberFunction()
    {
      int nums[N] = {1,2,3,4,5};
    }
  private:
    const int N;
};

測試代碼是

int main()
{
  aClass A;
  A.aMemberFunction();

  const int N = 5;
  int ints[N] = {5,4,3,2,1};
  return 0;
}

當我編譯(g ++ 4.6.2 20111027)時,我收到錯誤

problem.h: In member function ‘void aClass::aMemberFunction()’:
problem.h:7:31: error: variable-sized object ‘nums’ may not be initialized

如果我用int nums[N]注釋掉這行,我沒有得到編譯錯誤,所以ints數組的類似代碼很好。 在編譯時不是N的值嗎?

這是怎么回事? 為什么nums被認為是可變大小的數組? 為什么數組numsints處理方式不同?

在編譯時不是N的值嗎?

在編譯aMemberFunction ,編譯器現在不是N ,因為它的值是在運行時確定的。 看到只有一個構造函數並假設N的值可能不同於5,這是不夠智能的。

在您的示例中,在編譯時不知道N ,但它在這一個中:

class aClass
{
  private:
    static const int N = 5;
  public:
    aClass() {}
    void aMemberFunction()
    {
      int nums[N] = {1,2,3,4,5};
    }
};

上面的代碼將編譯,並將聲明一個包含五個int的本地數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM