2013-04-19 3 views
1

Я пытаюсь исправить код с ошибками, и у меня есть еще одна ошибка, которую я не могу понять. Ошибка говорит: ожидаемое первичное выражение перед токеном ']', что это значит? Я проверил на неуместные точки с запятой и имена переменных, но ничего не могу найти. Вот мой код (я прокомментировал строку с ошибкой):primary-expression before ']' error значение

// 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

Вы должны использовать 'std :: vector' в C++ – 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 Я могу спросить то же самое, почему вы бы это сделали? Когда вы объявляете функцию, вы объявляете ее так, чтобы она принимала массив как 1-й параметр. И когда вы называете это, компилятор уже знает, что массив действительно имеет массив типов (не так хорошее имя для переменной btw). Таким образом, никаких дополнительных советов не требуется. Или вы имели в виду что-то еще при установке []? – alexrider

0

Если вы хотите передать массив , вы можете передать указатель на первый элемент массиву:

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

«массив» рассматривается как зарезервированное слово в расширении Microsoft C. См. Why is "array" marked as a reserved word in Visual-C++?. Замените «массив» на что-то еще, например. 'Обр.

+1

Этот поток, несмотря на его имя, не устанавливает, что компилятор Microsoft ** обрабатывает 'array' как зарезервированное слово в C или C++. Речь идет об яркости синтаксиса. Обработка «массива» в качестве зарезервированного слова нарушает определение языка. –

Смежные вопросы