Форум программистов, компьютерный форум CyberForum.ru

Проблемы с классом GradeBook - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
10.10.2011, 11:11     Проблемы с классом GradeBook #1
Помогите пожалуйста исправить ошибки
1> GradeBook.cpp
1>d:\projects\cpp\cpp\gradebook.h(8): error C2864: GradeBook::students: в пределах класса могут быть инициализированы только статические константные данные-члены целого типа
1>d:\projects\cpp\cpp\gradebook.h(22): error C2327: GradeBook::students: не является именем типа, статическим членом или перечислителем
1>d:\projects\cpp\cpp\gradebook.h(22): error C2065: students: необъявленный идентификатор
1>d:\projects\cpp\cpp\gradebook.cpp(10): error C2758: GradeBook::students: требуется инициализация в списке инициализации базовых классов и членов
1> d:\projects\cpp\cpp\gradebook.h(8): см. объявление "GradeBook::students"
1> CPP.cpp
1>d:\projects\cpp\cpp\gradebook.h(8): error C2864: GradeBook::students: в пределах класса могут быть инициализированы только статические константные данные-члены целого типа
1>d:\projects\cpp\cpp\gradebook.h(22): error C2327: GradeBook::students: не является именем типа, статическим членом или перечислителем
1>d:\projects\cpp\cpp\gradebook.h(22): error C2065: students: необъявленный идентификатор
1>d:\projects\cpp\cpp\cpp.cpp(11): error C2597: недопустимая ссылка на нестатический член "GradeBook::students"
1>d:\projects\cpp\cpp\cpp.cpp(11): error C2078: слишком много инициализаторов
1> Создание кода...
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========




Gradebook.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "locale.h"
#include <string>
using namespace std;
// Определение класса GradeBook
class GradeBook
{   
public:
        const int students = 10; // Число студентов сдавших экзамен
        GradeBook(string, const int[]);//Конструктор инициализирующий Название курса и массив оценок
        void setCourseName(string); // Устанавливает название курса
 
        string getCourseName(); // Извлекает название курса
        void displayMessage(); // Вывести приветственное сообщение
        void processGrades(); // Различные действия над оценками
        int getMinimum(); // Найти минимальную оценку за контрольную
        int getMaximum(); // Найти максимальную оценку за контрольную
        double getAverage(); // Определить среднюю оценку за контрольную
        void outputBarChart(); // Вывести диаграмму распределения оценок
        void outputGrades(); // Вывести содержимое массива оценок
private:
        string courseName; // Название курса для данного GradeBook
        int grades[students]; // Массив оценок студента
};
Gradebook.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "stdafx.h"
#include <iostream>
#include <iomanip>
 
#include "GradeBook.h"
using namespace std;
 
// Вызываем конструктор
GradeBook::GradeBook(string name,const int gradesArray[])
{
    setCourseName(name);
    // Копировать оценки Из gradeArray в элемент данных grades
    for( int grade = 0; grade < students; grade++ )
        grades[grade] = gradesArray[grade];
 
}
 
void GradeBook::setCourseName(string name)
{
    if(name.length()<=25)
        courseName = name;
    else
    {
        courseName = name.substr(0,25);
        cout << "Название курса\"" << name << "\" не может содержать более 25 символов!\n" <<endl;
    }
}
 
string GradeBook::getCourseName()
{
    return courseName;
}
// Этот оператор вызывает getCourseName, чтобы получить название курса
void GradeBook::displayMessage()
{
    cout << "Добро пожаловать в GradeBook for , \n " << getCourseName() << "!" << endl;
}
void GradeBook::processGrades()
{
    // Вывести массив оценок
    outputGrades();
 
    cout << "Средняя оценка: "  << setprecision(2) << fixed << getAverage() << endl;
    cout << "Минимальная оценка: " << getMinimum() << endl;
    cout << "Максимальная оценка: " << getMaximum() << endl;
    // Диаграмма
    outputBarChart();
}
int GradeBook::getMinimum()
{
    int lowGrade = 100;
    for ( int grade = 0; grade < students; grade++ )
    {
        // Если текущая оценка меньше lowGrade, то присвоить её lowGrade
        if(grades[grade] < lowGrade)
            lowGrade = grades[grade];
    }
    return lowGrade;
}
int GradeBook::getMaximum()
{
    int highGrade = 0;
    for ( int grade = 0; grade < students; grade++)
    {
        if(grades[grade] > highGrade)
            highGrade = grades[grade];
    }
    return highGrade;
}
double GradeBook::getAverage()
{
    int total = 0;
    for ( int grade = 0; grade < students; grade++)
        total += grades[grade];
    return static_cast<double>(total) / students;
}
void GradeBook::outputBarChart()
{
    cout << "Диаграмма оценок" << endl;
    // Хранят частоты для каждого из диапазонов по 10 оценкам
    const int frequencySize = 11;
    int frecuency[frequencySize] = {0};
    // Для каждой оценки увеличить соответствующую величину
    for ( int grade = 0; grade < frequencySize; grade++ )
        frecuency[grades[grade] / 10]++;
    // Для каждой частоты вывести столбец диаграммы
    for ( int count = 0; count < frequencySize; count++ )
    {
        // Вывести метки столбцов
        if(count == 0)
            cout << " 0-9: ";
        if(count == 100)
            cout << " 100: ";
        else 
            cout << count * 10 << "-" << (count *10) + 9 << " : ";
        // Напечатать столбец звёздочек
        for(int stars = 0; stars < frecuency[count]; stars++)
            cout << "*";
    }
}
void GradeBook::outputGrades()
{
    cout << "Оценки: \n\n" ;
    for ( int student = 0; student < students; student++ )
        cout << "Студенты " << setw(2) << student + 1 << " : " << setw(3) << grades[student] << endl;
}
Cpp.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"
#include <iostream>
#include <iomanip>
 
#include "GradeBook.h"
using namespace std;
 
int main()
{   
    text();
    int gradesArray[ GradeBook::students ] = {87,68,94,100,83,78,85,91,76,87};
    GradeBook GB1("CS101 JUNIOR ",gradesArray);
    GB1.displayMessage();
    GB1.processGrades();
    system("PAUSE");
    return EXIT_SUCCESS;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2011, 11:11     Проблемы с классом GradeBook
Посмотрите здесь:

C++ Ошибка с классом.
C++ Работа с классом
работа с классом C++
C++ программа с классом
C++ Определить класс Gradebook: Не могу понять что не так
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
10.10.2011, 12:00     Проблемы с классом GradeBook #2
C++
1
static const int students = 10;
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
10.10.2011, 12:58  [ТС]     Проблемы с классом GradeBook #3
Появилось теперь
1>GradeBook.obj : error LNK2005: "void __cdecl text(void)" (?text@@YAXXZ) уже определен в CPP.obj
1>D:\Projects\CPP\Debug\CPP.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
10.10.2011, 13:56     Проблемы с классом GradeBook #4
В начале Gradebook.h надо написать:
C++
1
#pragma once
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
10.10.2011, 13:58  [ТС]     Проблемы с классом GradeBook #5
не помогло
1>------ Построение начато: проект: CPP, Конфигурация: Debug Win32 ------
1> CPP.cpp
1> Создание кода...
1> Компиляция...
1> GradeBook.cpp
1> Создание кода...
1>GradeBook.obj : error LNK2005: "void __cdecl text(void)" (?text@@YAXXZ) уже определен в CPP.obj
1>D:\Projects\CPP\Debug\CPP.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
10.10.2011, 14:01     Проблемы с классом GradeBook #6
Найдите хедер, в котором объявлена функция text, и туда добавьте то, что я сказал.
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
10.10.2011, 14:17  [ТС]     Проблемы с классом GradeBook #7
Спасибо, проблема решена Release выводиться и компилируется отлично, не знал и инкогда не пользовался сборкой debug, выбрал её и появилось сие чудо

Скажите Почему в нем(debug компиляции) появились такие ошибки, как с этим бороться, правильно находить и исправлять ошибки ?
Миниатюры
Проблемы с классом GradeBook  
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
10.10.2011, 14:27     Проблемы с классом GradeBook #8
TBIKC, скорее всего, выход за пределы массива.
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
10.10.2011, 14:31  [ТС]     Проблемы с классом GradeBook #9
gooseim, Как это подлатать ? И почему тогда раз есть недочёт то Release скомпилировался
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
10.10.2011, 14:35     Проблемы с классом GradeBook #10
TBIKC, проверить значения. Я так глянул, вроде действительно значения элементов массива grades выходят за пределы массива frecuency.
Разная работа при debug и release обычное дело, потому что в режиме debug компилятор вставляет отладочную информацию, в т.ч. проверку памяти (грубо говоря).
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
10.10.2011, 14:37  [ТС]     Проблемы с классом GradeBook #11
Посвятите меня чтобы я тоже увидел пожалуйста, не могу понять где в массиве не так
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
10.10.2011, 14:44     Проблемы с классом GradeBook #12
TBIKC,
ошибка вроде здесь:
const int frequencySize = 11;
идет перебор от 0 до 10 по grades:
for ( int grade = 0; grade < frequencySize; grade++ )
frecuency[grades[grade] / 10]++;
в то же время границы grades от 0 до 9.
const int students = 10;
int grades[students];
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
10.10.2011, 15:00  [ТС]     Проблемы с классом GradeBook #13
Исправил, появилась ошибка:
Run-Time Check Failure #2 - Stack around the variable 'frecuency' was corrupted.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
10.10.2011, 15:01     Проблемы с классом GradeBook #14
TBIKC, покажите, как исправили.
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
10.10.2011, 15:10  [ТС]     Проблемы с классом GradeBook #15
const int frequencySize = 11; Изменил на 10
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
10.10.2011, 15:11     Проблемы с классом GradeBook #16
grades[3] / 10 = 10 - выход за пределы массива.
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
10.10.2011, 15:21  [ТС]     Проблемы с классом GradeBook #17
Не понимаю что изменить
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
10.10.2011, 15:23     Проблемы с классом GradeBook #18
int gradesArray[ GradeBook::students ] = {87,68,94,100,83,78,85,91,76,87};
Число 100 при делении на 10 дает 10, из-за чего происходит выход за пределы массива.
Надо изменить либо входные данные, либо алгоритм.
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
10.10.2011, 15:28  [ТС]     Проблемы с классом GradeBook #19
Оценка может быть равна 100, поэтому надо изменить алгоритм
Только как? Странно что в учебнике Дейтлов именно так написано, и не позаботились о переполнении массива

Добавлено через 57 секунд
Хотя изменивши 100 на 99 всё равно вылезло исключение ...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2011, 15:32     Проблемы с классом GradeBook
Еще ссылки по теме:

C++ работа с классом
Проблемы с конструктором. "отсутствуют экземпляры перегружена функция GradeBook::GradeBook" C++
Ошибка с классом в C++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
10.10.2011, 15:32     Проблемы с классом GradeBook #20
TBIKC, у меня ваш код работает, даже в debug, если написать frequencySize = 10 и вместо 100 - 99.
Yandex
Объявления
10.10.2011, 15:32     Проблемы с классом GradeBook
Ответ Создать тему
Опции темы

Текущее время: 05:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru