2013-04-19 3 views
1

오류가있는 코드를 수정하려고하는데 알아낼 수없는 오류가 하나 남았습니다. 오류 : ''토큰 앞에 예상 기본 표현식이 무엇을 의미합니까? 잘못 배치 된 세미콜론과 변수 이름을 확인했지만 아무것도 찾을 수 없습니다. 여기에 내 코드가있다. 나는이 라인을 오류로 주석 처리했다 :'앞에'주 오류 의미

// countOnes.cpp 
#include<iostream> 
#include<cstdlib> 
using namespace std; 

void countOnes(int array[]); // Count the number of 1s in a given int array. 
const int arraySize = 10; 
int array[ arraySize ]; 
int countOne = 0; 

int main() 
{ 
    for (int i = 0; i <= arraySize; i++) 
    { 
    array[ i ] = rand() % 3; // Fill array with 0, 1 or 2 randomly 
    cout << array[ i ] << " "; 
    } 
    countOnes(array[], arraySize); //ERROR 

    cout << "\n The number of 1s in the array: " << countOne; 

    return 0; 
} 

void countOnes(int array[], int arraySize) 
{ 
    for (int i = 0; i <= arraySize; i++) 
    if (array[ i ] == 1) 
     countOne = countOne + 1; 
    return; 
} 
+0

C++에서'std :: vector' 사용을 고려해야합니다. – balki

+0

런타임 오류가 아니라 컴파일러 오류 – balki

답변

4

대괄호는 필요하지 않다. 당신이 배열을 전달하려면

 
countOnes(array
             
  
    [] 
  , arraySize); 

2
countOnes(array[], arraySize); //ERROR 

당신은 [] 여기
는 또한

void countOnes(int array[]); // Count the number of 1s in a given int array. 

의 선언은 그 정의

void countOnes(int array[], int arraySize) 
+0

이것은 어리석은 질문 일 수 있습니다. 왜 []하지 않아도됩니까? – user2085224

+0

@ user2085224 나는 왜 그런 식으로 질문 할 수 있습니까? 함수를 선언 할 때 배열을 첫 번째 매개 변수로 받아들이도록 선언합니다. 그리고 당신이 그것을 컴파일러라고 부르는 것은 배열이 실제로 타입 배열 (변수 btw에 대해 그렇게 좋은 이름은 아님)이라는 것을 이미 알고 있습니다. 따라서 추가 힌트가 필요하지 않습니다. 아니면 []을 칠 때 다른 것을 의미 했습니까? – alexrider

0

에 해당하지 않습니다 필요가 없습니다 첫 번째 요소에 대한 포인터를 배열에 전달할 수 있습니다.

void countOnes(int* array, int size); 
1

'배열'은 Microsoft의 C 확장에서 예약어로 처리됩니다. Why is "array" marked as a reserved word in Visual-C++?을 참조하십시오. 'array'를 다른 것으로 대체하십시오. 'arr'.

+1

그 스레드는 그 이름에도 불구하고 마이크로 소프트의 ** 컴파일러 **가'array'를 C 나 C++의 예약어로 취급한다는 것을 확증하지 못합니다. 이것은 구문 형광펜에 관한 것입니다. 'array'를 예약어로 취급하면 언어 정의에 위배됩니다. –