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

Ошибка в приватном элементе класса - C++

Восстановить пароль Регистрация
 
Anikin
3 / 3 / 3
Регистрация: 20.06.2016
Сообщений: 28
Завершенные тесты: 1
30.06.2016, 16:27     Ошибка в приватном элементе класса #1
Компилятор ругается на приватный массив. Текст ошибки: int IntegerSet::a[100] is a private. Не понимаю в чем проблема.
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
#include <iostream>
using namespace std;
 
class IntegerSet {
public:
    IntegerSet();                   //constructor
    IntegerSet(int, int, int, int, int);            //constructor for 5 elements
    ~IntegerSet();                              //destructor
    void unionOfIntegerSet(int*, int*);         //logic or
    void interestionOfIntegerSet(int*, int*);   //logic and
    void insertElement(int);            //push
    void deleteElement(int);            //pop
    void setPrint(int*);                //printing 1 1 0 0
    int isEqualTo(IntegerSet, IntegerSet);          //equality
    
private:
    int a[100];
};
 
IntegerSet::IntegerSet()
{
    for(int i = 0; i < 100; i++) a[i] = 0;
}
 
IntegerSet::IntegerSet(int int1, int int2,
    int int3, int int4, int int5)
{
    a[int1] = int1 == -1 ? 0 : int1;
    a[int2] = int2 == -1 ? 0 : int2;
    a[int3] = int3 == -1 ? 0 : int3;
    a[int4] = int4 == -1 ? 0 : int4;
    a[int5] = int5 == -1 ? 0 : int5;
}
 
//logic or
void IntegerSet::unionOfIntegerSet(int* set1, int* set2)
{
    int* temp = new int[100];
    for(int i = 0; i < 100; i++)
    if (set1[i] == 1 || set2[i] == 1) temp[i] = 1;
        else temp[i] = 0;
    
    for(int i = 0; i < 100; i++) a[i] = temp[i];
}
 
//logic and
void IntegerSet::interestionOfIntegerSet(int* set1, int* set2)
{
    int* temp = new int[100];
    for(int i = 0; i < 100; i++)
    if (set1[i] == 1 && set2[i] == 1) temp[i] = 1;
        else temp[i] = 0;
            
    for(int i = 0; i < 100; i++) a[i] = temp[i];
}
 
//push
void IntegerSet::insertElement(int number)
    {a[number] = 1; }
    
//pop
void IntegerSet::deleteElement(int number)
    {a[number] = 0; }
 
void IntegerSet::setPrint(int* a)
{
    for(int i = 0; i < 10; i++) {
        for(int j = 0; j < 10; j++)
            cout << a[i * 10 + j] << ' ';
        cout << endl;
        }
}
 
//equality
int IntegerSet::isEqualTo(IntegerSet set1, IntegerSet set2)
{
    for(int i = 0; i < 100; i++)
        if (set1.a[i] != set2.a[i]) return 0;
        
    return 1;
}
 
//-----------------------------------------
//
//ending of implementation class IntegerSet
//
//-----------------------------------------
 
int main() {
    IntegerSet set1;
    setlocale(LC_ALL, "");
    
    cout << "Г‡Г*Г*Г·ГҐГ*ГЁГї ГЇГ® óìîë÷Г*Г*ГЁГѕ set1:" << endl;
    setPrint(set1.a);
    
    
    
    return 0;
}
Миниатюры
Ошибка в приватном элементе класса  
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DUMP
54 / 28 / 7
Регистрация: 22.02.2015
Сообщений: 240
30.06.2016, 16:33     Ошибка в приватном элементе класса #2
Цитата Сообщение от Anikin Посмотреть сообщение
C++
1
int IntegerSet::isEqualTo(IntegerSet set1, IntegerSet set2)
Создаётся два объекта и ты пытаешь обратится в их приват. Нельзя так делать
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
30.06.2016, 16:39     Ошибка в приватном элементе класса #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Anikin Посмотреть сообщение
C++
1
setPrint(set1.a);
Ошибка здесь.
Функция main логично не имеет доступ к a, т.к. он в привате.
При этом setPrint - это функция класса. Почему она вызывается без объекта? И зачем ей параметр в виде указателя?
Наверное должно быть так:
C++
1
set1.setPrint();
А функция описана так:
C++
1
void IntegerSet::setPrint()
no_attention
27 / 27 / 13
Регистрация: 18.05.2016
Сообщений: 128
30.06.2016, 16:41     Ошибка в приватном элементе класса #4
Anikin, ты из main пытаешься обратиться к приватному массиву а, так нельзя делать, он на то и приватный. Также setPrint у тебя не статическая функция, её нельзя вызывать без объекта, как ты это делаешь в main. Короче, как решение предлагаю убрать аргумент у setPrint и печатать массив, который не передаётся как аргумент, а который входит в класс, а после строчку 94 заменить на
C++
1
set1.setPrint();
DUMP
54 / 28 / 7
Регистрация: 22.02.2015
Сообщений: 240
30.06.2016, 16:53     Ошибка в приватном элементе класса #5
Цитата Сообщение от DUMP Посмотреть сообщение
Создаётся два объекта и ты пытаешь обратится в их приват. Нельзя так делать
Я был не прав.
no_attention
27 / 27 / 13
Регистрация: 18.05.2016
Сообщений: 128
30.06.2016, 16:57     Ошибка в приватном элементе класса #6
DUMP, а, кстати, мне кажется, твоё замечание тоже не лишено смысла, это посторонние объекты, в их приват залезать нельзя, как я понимаю.
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
30.06.2016, 17:01     Ошибка в приватном элементе класса #7
Цитата Сообщение от no_attention Посмотреть сообщение
это посторонние объекты, в их приват залезать нельзя, как я понимаю.
Разграничение доступа в С++ делается на класс, а не на объект.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2016, 17:17     Ошибка в приватном элементе класса
Еще ссылки по теме:

C++ Ошибка методов класса
Ошибка с деструктором класса C++
C++ Ошибка при вызове метода класса в методе другого класса

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

Или воспользуйтесь поиском по форуму:
Anikin
3 / 3 / 3
Регистрация: 20.06.2016
Сообщений: 28
Завершенные тесты: 1
30.06.2016, 17:17  [ТС]     Ошибка в приватном элементе класса #8
Спасибо, я решил проблему. Но почему-то в реализации деструктора ошибка, хотя в самом классе он указан: declaration of 'IntegerSet::~IntegerSet()' outside of class is not definition [-fpermissive]

Я разобрался в чем дело, нужны были пустые фигурные скобки, а не просто ;
Yandex
Объявления
30.06.2016, 17:17     Ошибка в приватном элементе класса
Ответ Создать тему

Метки
private, класс
Опции темы

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