다음은 n = 1, ..., 20에 대해 1에서 n까지의 합계를 인쇄하는 작은 스크립트입니다.컴파일 시간에 알 수없는 크기의 배열 클래스 인스턴스화
Main.cpp: In function ‘int test(long unsigned int)’:
Main.cpp:9:13: error: ‘n’ is not a constant expression
array<int,n> myArray;
^
Main.cpp:9:13: note: in template argument for type ‘long unsigned int’
Main.cpp:9:22: error: invalid type in declaration before ‘;’ token
array<int,n> myArray;
^
Main.cpp:11:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int iii = 0; iii < n; iii++)
^
Main.cpp:12:14: error: invalid types ‘int[int]’ for array subscript
myArray[iii] = iii+1;
^
Main.cpp:16:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int iii = 0; iii < n; iii++)
^
Main.cpp:17:22: error: invalid types ‘int[int]’ for array subscript
nSum += myArray[iii];
^
make: *** [Main.o] Error 1
문제는 n
는 상수 표현 아니라고 (무엇보다도) 것 같다, 나는 그 문제가 왜 얻을 : 물론
#include <iostream>
#include <array>
using namespace std;
int test(int n)
{
array<int,n> myArray;
for (int iii = 0; iii < n; iii++)
myArray[iii] = iii+1;
int nSum;
for (int iii = 0; iii < n; iii++)
nSum += myArray[iii];
return nSum;
}
int main()
{
for (int n = 1; n <= 20; n++)
cout << test(n) << endl;
return 0;
}
,이 컴파일되지 않습니다 , 그러나 나는 그것을 어떻게 풀 수 있는지 전혀 모른다.
새 함수를 사용하여 "일반"배열을 인스턴스화하는 방법을 알고 있지만 배열 클래스를 사용하여 가능하다는 것을 알지 못합니다.
test
함수를 n
으로 처리하려면 어떻게해야합니까?
'std :: vector'의 용도입니다. – leemes