[英]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
被認為是可變大小的數組? 為什么數組nums
和ints
處理方式不同?
在編譯時不是
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.