2014-11-03 3 views
0

Так что я просто пытаюсь установить значение данного массива для результата функции count. Я прочитал API относительно функции count, но я продолжаю получать ошибку expression must have class type при попытке передать мои аргументы указанной функции count.функции для поиска начала и конца массива

Вот мой код до сих пор:

#include <iostream> 
#include <limits> 
#include <algorithm> 
#include <array> 

using namespace std; 

int main(){ 

    const size_t ARRAY_SIZE = 400; 
    int totalElements; 
    cout << "How many grades will you be entering?: "; 
    cin >> totalElements; 

    int gradesArray[ARRAY_SIZE]; 
    for(int i = 0; i < totalElements; i++){ 
     cout << "Please enter a grade: "; 
     cin >> gradesArray[i]; 
    } 
    //to be incrimented with each count of a certain grade, from 0-5 
    int countOfGrades[6] = {0, 0, 0, 0, 0, 0}; 

    countOfGrades[0] = count(gradesArray.begin(),gradesArray.end(),0); 

    return 0; 

}//end of main 
+0

Где вы определили 'count'? –

+0

http://www.cplusplus.com/reference/algorithm/count/ – FluffyKittens

+0

@ScottHunter: Он не сделал этого: http://en.cppreference.com/w/cpp/algorithm/count –

ответ

3

Массивы не являются векторами, и они не имеют begin() или end() функцию (или каких-либо функций-членов, они не типы класса!)

Однако вы можете использовать std::begin и std::end или просто передать массив и адрес последнего элемента + 1.

+0

Чтобы уточнить, это будет выглядеть как 'std :: count (std :: begin (gradesArray), std :: end (gradesArray), 0)' –

+0

Спасибо, я привык к Ruby, где все это тип класса. – FluffyKittens

2

массивы не имеют начала и конца методы, может быть, вы хотите std::vector. Или просто пропустите указатели, которые следуют за интерфейсом итератора, требуемым счетчиком.

count(gradesArray, gradesArray + ARRAY_SIZE, 0); 
+0

API ясно говорит, что они начинают() и end() как функции-члены? Что мне не хватает? http://www.cplusplus.com/reference/array/array/begin/ – FluffyKittens

+0

Это для типа 'std :: array', который отличается от обычного массива. – msandiford

+0

О, я вижу. Ну, это имеет смысл, даже если это не кажется очень интуитивным. Спасибо за помощь. – FluffyKittens

0

std::begin и std::end являются , не являющихся членами функции, которые могут принимать контейнер или массив. container.begin() и container.end() являются член функции. Обычный массив не имеет никаких функций-членов. Поскольку у вас есть компилятор, поддерживающий C++ 11, нет причин использовать необработанные массивы. Предпочитают std::array или std::vector.

std::array<int, ARRAY_SIZE> gradesArray; 
Смежные вопросы