2013-04-27 4 views
-4

배열을 반복하고 C++에서 요소를 가져 오려고합니다. 내 배열이 10 개 항목으로 구성되어 있기 때문에C 배열의 int 배열

for (int count =0; count < 10 ; count++){ 

이 오류가없는 : 나는에 for 루프를 변경하는 경우

int result; 
int index_array [] = {11,12,13,14,15,16,17,18,19,20}; 

for (int count =0; count < index_array.length() ; count++){ 
    if(count%2 == 0){ 
    cout << "Elements at the even index are " << index_array[count] << endl; 
    } 
} 

: 여기 내 코드입니다. 그러나 .length() 메소드를 사용하면 표현식의 클래스 유형이이어야합니다. 이클립스에있는 경우보다 자세한 오류 설명이 들어있는 것처럼 나는 그것이 무엇인지 전혀 모른다. 누군가 제발 뭐가 잘못 됐는지 말해 줄래?

업데이트 답 : 내 스레드가 부결지고 왜

for (int count =0; count < sizeof(index_array)/sizeof(index_array [0]) ; count++){ 
    if((count+1)%2 == 0){ 
     cout << "Elements at the even index are " << index_array[count] << endl; 
    } 
} 

나는하지 않습니다. 나는 나의 질문을 명확하게 설명했고, 나는 나의 해결책을 게시했고 대답을 업데이트했다. 투표권을 가진 사람은 투표를 취소하십시오. 감사.

+4

배열은 C++에서 say 당 "Objects"가 아니므로 관련 메서드가 없습니다."표현식에 클래스 유형이 있어야합니다"라는 오류는 다음과 같이 표현합니다. 클래스 (또는 구조)의 메소드 만 호출 할 수 있습니다. – Nbr44

+2

고정 길이 배열을 원한다면'index_array.length()'를'sizeof (index_array)/sizeof (index_array [0])'로 변경할 수 있습니다 – Dave

+0

죄송합니다. 무슨 소리 야? 몇 가지 예를 들어 주시겠습니까? – Rauryn

답변

6

int index_array[]length()을 호출 할 수 없습니다. 개체가 아닌 프리미티브 배열입니다.

size()으로 전화 할 수 있습니다 (예 : vector<int> index_array).

+0

.length 메서드로 벡터 만 사용할 수 있습니까? 그리고 배열은 sizeof 메서드 만 사용할 수 있습니까? – Rauryn

+0

[Vector] (http://www.cplusplus.com/reference/vector/vector/)에는 원하는 것을 수행하는'size()'메소드가 있습니다. 예, 원시 배열에는 메서드가 없습니다. 할 수있는 작업은 sizeof * operator *를 호출하는 것입니다. –

+0

알았어. 고마워. – Rauryn

2

C++의 일반 배열에 대해서는 .length이 없습니다. 대신 std::vector을 사용하고이 방법 size()를 사용할 수 있습니다

귀하의 경우 또한
std::vector<int> index_array {11,12,13,14,15,16,17,18,19,20}; 

for (int count =0; count < index_array.size() ; count++){ 
    if(count%2 == 0){ 
     cout << "Elements at the even index are " << index_array[count] << endl; 
    } 
} 

, 당신은 배열의 길이를 계산할 수 있습니다 (클래스) 반대하지 않는 C++로

int length = sizeof(index_array)/sizeof(index_array[0]); 
+0

나는 다음과 같은 벡터를 작성했습니다 : 벡터 index_array {11,12,13,14,15,16,17,18,19,20}; 하지만 첫 번째 중괄호에는 오류가 있습니다. 뭐가 문제 야? – Rauryn

+0

아, 나는'-std = C++ 11' 모드로 코드를 작성했습니다. 컴파일러 모드를 C++ 11로 변경하여 이니셜 라이저 목록을 만들 수 있습니다. – deepmax

0

배열 때문에 메소드 나 애트리뷰트가 없다. 는 대신 Array 클래스를 사용하고 이것은 당신이 몇 가지 length() 메소드를 호출 할 수있는 객체가 아닌 std::array::size()

+0

C++는 대소 문자를 구분하는 언어입니다. 'Array'가 아니라'array'입니다. – soon

1
int index_array [] = {11,12,13,14,15,16,17,18,19,20}; 

같은 크기를 얻을 수있을 수 있습니다. 대신 C와 마찬가지로 일반 배열입니다.

두 가지 중 하나를 수행 할 수 있습니다.

// C++11 syntax 
std::vector<int> index_array {11,12,13,14,15,16,17,18,19,20}; 

// Pre C++11 syntax 
int ia_src[] = {11,12,13,14,15,16,17,18,19,20}; 
vector<int> index_array (ia_src, ia_src + sizeof (ia_src)/sizeof (*ia_src)); 

std::array<int,10> index_array = {11,12,13,14,15,16,17,18,19,20}; 

번째는 단순히 같은 배열을 처리하는 것이다 :

제는 size() 방법으로 C++ 컬렉션 클래스 등 std::vector (사이즈 조절) 또는 std::array (일정한 크기) 중 하나를 사용하는 이 경우 배열의 길이는 다음 표현식을 사용하여 찾을 수 있습니다.

sizeof (index_array)/sizeof (*index_array) 

단지 배열에서만 작동한다는 점에 유의하십시오. 해당 배열을 함수에 전달하면 첫 번째 요소에 대한 포인터로 사라지고 sizeof은 더 이상 예상대로 작동하지 않습니다. 크기가 여전히 배열 인 동안 크기를 가져와 함께 전달해야합니다.