2017-09-11 54 views
0

我得到在C以下錯誤++程序:可變大小的數組類型「INT [大小]」是不是一個有效模板參數

可變大小的數組類型「INT [大小]」是不是一個有效模板 參數

用於以下項目:

#include <iostream> 
using namespace std; 

template <typename T> 
void func (T& Array) 
{ 
    cout << "Hi"; 
} 

int main() 
{ 
    int size = 100; 
    int arr [100]; 
    int arr1 [size]; 
    func (arr); // compiled 
    func (arr1); // gives error 
} 

請幫我解決這個問題。我想從一些變量中獲取數組的大小。 在此先感謝。

+9

C++不分配空間實際上有[可變長度數組](https://en.wikipedia.org/wiki/Variable-length_array),儘管一些編譯器將它添加爲語言的擴展。 –

+0

你在模板函數'func(T&Array)'中對你的'Array'做了什麼?你什麼也不做。要解決您的問題,您可以使用動態分配,但模板不是解決方案。 –

+0

至於你的問題,請記住,模板是純編譯時功能。可變長度數組在運行時創建。 –

回答

4

替換:

int size = 100; 

const int size = 100; 

這樣,編譯器知道size不會改變,可以適當的靜態數組arr1

+0

這不是問題。 VLA可以存在,因爲編譯器知道如何「正確地」處理它。 –

+0

@PasserBy不確定你的意思,因爲建議的更改會使程序合法的官方C++,導致在編譯時綁定的數組被綁定,並且可以使用數組類型作爲推導的模板參數。 – aschepler

+0

@aschepler解釋說空間不能被分配,因爲它是一個運行時的值,這是不正確的。當然可以,否則這種擴展是不可能的。不好的原因在於它不夠標準並破壞了類型系統。 –

-1

在C++中,您無法使用變量定義數組的大小。 我建議你用vector替換這個數組,或者定義一個預處理器宏,它將保存你的數組的大小。

+4

_preprocessor macro_ no,它是C++,從不使用宏,因爲您可以使用整型常量。 –

相關問題