2011-05-01 54 views
0

此代碼在Bloodshed Dev-C++ 4.9.9.2中編譯得很好,但在Visual Studio 2010中出現錯誤:表達式必須有一個常量值。如何在用戶輸入關於數組大小而不使用指針之後創建數組?C++數組Visual Studio 2010 vs Bloodshed Dev-C++ 4.9.9.2

#include <cstdlib> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    int size = 1; 
    cout << "Input array size "; 
    cin >> size; 
    int array1[size]; 
    system("PAUSE"); 
    return 0; 
} 

回答

3

使用std::vector而不是數組(通常反正是個好主意):

std::vector<int> array1(size); 

如果你不在乎,你所看到的差別不是從開發 - C++本身,它是從GCC /克++。你使用的是C++的非標準擴展,g ++正好實現,但VC++不支持。

+0

它可以通過在命令行中添加'-std = C++ 03'或'-std = C++ 0x'來禁用。但是這些對於Dev-C++中的GCC來說不起作用,它已經過時了,應該被活活燒死。 – rubenvb 2011-05-01 19:35:10

0

的能力使用可變大小自動數組是C,而不是C++的部分的一部分,並且是GCC似乎想強加於我們所有的擴展。 DevC++是一個不可靠的cr * p,雖然它在這裏沒有錯。 (這完全是海灣合作委員會的做法) - 我無法想象爲什麼你(或其他人)想要使用它。

你應該真的用GCC編譯你的C++代碼,並用標誌來警告你這些東西。我建議 - 最低限度和最低限度。

-1

或者

int array1 = new int[size];

將藏漢工作,我認爲(已經有一個月或3,因爲我上次觸及C++)

不過說實在的,如果用C++,去一個std :: vector的,更靈活。

+0

在此處發帖之前再次觸摸它。 Downvote不是由我順便說一句。 – 2011-05-01 19:27:22

+0

downote是由我 - 你需要一個'int * array1'來存儲'new'返回的指針。 – 2011-05-01 19:41:59