내 코드에 다음과 같은 문제가 있습니다.
int n = 10;
double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
다음 오류를 반환합니다.
error: variable-sized object 'tenorData' may not be initialized
double tenorData[10]
작품을 사용하는 반면 .
왜 그럴까요?
내 코드에 다음과 같은 문제가 있습니다.
int n = 10;
double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
다음 오류를 반환합니다.
error: variable-sized object 'tenorData' may not be initialized
double tenorData[10]
작품을 사용하는 반면 .
왜 그럴까요?
답변:
C ++에서 가변 길이 배열은 유효하지 않습니다. G ++에서는 이것을 "확장자"로 허용하므로 (C에서 허용하기 때문에) G ++에서는 ( -pedantic
C ++ 표준을 따르지 않고) 다음과 같이 할 수 있습니다.
int n = 10;
double a[n]; // Legal in g++ (with extensions), illegal in proper C++
"가변 길이 배열"(적절한 가변 길이 배열이 허용되지 않기 때문에 C ++에서 "동적 크기 배열"이라고 더 잘 함)을 원하면 메모리를 직접 동적으로 할당해야합니다.
int n = 10;
double* a = new double[n]; // Don't forget to delete [] a; when you're done!
또는 더 나은 방법은 표준 컨테이너를 사용하는 것입니다.
int n = 10;
std::vector<double> a(n); // Don't forget to #include <vector>
그래도 적절한 배열이 필요 하면 만들 때 변수가 아닌 상수를 사용할 수 있습니다 .
const int n = 10;
double a[n]; // now valid, since n isn't a variable (it's a compile time constant)
마찬가지로 C ++ 11의 함수에서 크기를 얻으려면 다음을 사용할 수 있습니다 constexpr
.
constexpr int n()
{
return 10;
}
double a[n()]; // n() is a compile time constant expression
vector
는 매우 유용합니다.