Saya mengalami masalah berikut dengan kode saya:
int n = 10;
double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Mengembalikan kesalahan berikut:
error: variable-sized object 'tenorData' may not be initialized
Sedangkan menggunakan double tenorData[10]
karya.
Ada yang tahu kenapa?
c++
arrays
initialization
size
msmf14.dll
sumber
sumber
Jawaban:
Dalam C ++, array panjang variabel tidak legal. G ++ mengizinkan ini sebagai "ekstensi" (karena C mengizinkannya), jadi di G ++ (tanpa harus
-pedantic
mengikuti standar C ++), Anda dapat melakukan:int n = 10; double a[n]; // Legal in g++ (with extensions), illegal in proper C++
Jika Anda menginginkan "larik panjang variabel" (lebih baik disebut "larik berukuran dinamis" dalam C ++, karena larik panjang variabel yang sesuai tidak diizinkan), Anda juga harus mengalokasikan memori sendiri secara dinamis:
int n = 10; double* a = new double[n]; // Don't forget to delete [] a; when you're done!
Atau, lebih baik lagi, gunakan wadah standar:
int n = 10; std::vector<double> a(n); // Don't forget to #include <vector>
Jika Anda masih menginginkan array yang tepat, Anda dapat menggunakan konstanta , bukan variabel , saat membuatnya:
const int n = 10; double a[n]; // now valid, since n isn't a variable (it's a compile time constant)
Demikian pula, jika Anda ingin mendapatkan ukuran dari fungsi di C ++ 11, Anda dapat menggunakan
constexpr
:constexpr int n() { return 10; } double a[n()]; // n() is a compile time constant expression
sumber
vector
, sangat berguna.