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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Anikin
4 / 4 / 4
Регистрация: 20.06.2016
Сообщений: 41
Завершенные тесты: 1
#1

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

30.06.2016, 16:27. Просмотров 176. Ответов 7

Компилятор ругается на приватный массив. Текст ошибки: 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2016, 16:27     Ошибка в приватном элементе класса
Посмотрите здесь:

Как в элементе управления CListCtrl поймать нажатие определенной клавиши на элементе? - C++
Поймать нажатие клавиши вообще - несложно: BOOL CSysbackupDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { ...

Ошибка в конструкторе класса - C++
Всем доброго времени суток! Есть простая задачка: Написать реализацию класса и короткую программку, использующую все функции-члены. ...

Ошибка в создание класса - C++
Подскажите что не так #include &quot;stdafx.h&quot; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; ...

Ошибка преобразования класса - C++
Добрый день! Уважаемые, помогите пожалуйста найти ошибку. #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include...

Ошибка в организации класса - C++
Мои первые попытки написать консольную версию пошагового боя обвенчались неудачей в самом начале. При тестовых ударах в цикле for увидел...

Ошибка проектирования класса - C++
Начал писать класс дробей, но сразу же наткнулся на какие-то ошибки, не могу понять как исправить. head.h: #ifndef HEAD_H #define...

Ошибка с деструктором класса - C++
Всем привет, здесь код .h файла с описанным классом. В классе 2 конструктора: 1-ый без аргументов 2-ой инициализации, в каждом из которых я...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DUMP
57 / 31 / 7
Регистрация: 22.02.2015
Сообщений: 258
30.06.2016, 16:33     Ошибка в приватном элементе класса #2
Цитата Сообщение от Anikin Посмотреть сообщение
C++
1
int IntegerSet::isEqualTo(IntegerSet set1, IntegerSet set2)
Создаётся два объекта и ты пытаешь обратится в их приват. Нельзя так делать
DrOffset
6922 / 4115 / 942
Регистрация: 30.01.2014
Сообщений: 6,910
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
57 / 31 / 7
Регистрация: 22.02.2015
Сообщений: 258
30.06.2016, 16:53     Ошибка в приватном элементе класса #5
Цитата Сообщение от DUMP Посмотреть сообщение
Создаётся два объекта и ты пытаешь обратится в их приват. Нельзя так делать
Я был не прав.
no_attention
27 / 27 / 13
Регистрация: 18.05.2016
Сообщений: 128
30.06.2016, 16:57     Ошибка в приватном элементе класса #6
DUMP, а, кстати, мне кажется, твоё замечание тоже не лишено смысла, это посторонние объекты, в их приват залезать нельзя, как я понимаю.
DrOffset
6922 / 4115 / 942
Регистрация: 30.01.2014
Сообщений: 6,910
30.06.2016, 17:01     Ошибка в приватном элементе класса #7
Цитата Сообщение от no_attention Посмотреть сообщение
это посторонние объекты, в их приват залезать нельзя, как я понимаю.
Разграничение доступа в С++ делается на класс, а не на объект.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2016, 17:17     Ошибка в приватном элементе класса
Еще ссылки по теме:

Ошибка методов класса - C++
#include &quot;Header.h&quot; #include &lt;iostream&gt; int main() { using ms::List; List&lt;int&gt; mylist; // 1 int val = 7.1; ...

Ошибка создания экземпляра класса - C++
Собственно ошибка в мейне error C2227: left of '-&gt;AddLast' must point to class/struct/union/generic type Содержимое StringList.h: ...

Ошибка: член класса QLineEdit - C++
ошибка: 'class QLineEdit' has no member named 'str' a=ui-&gt;lineEdit-&gt;str.toAscii().data(); подскажите что не...

Ошибка: не определены переменные класса - C++
Здравствуйте. Есть класс, он содержит 3 private переменных и функцию, работающую с ними. При компиляции появляется ошибка, что не...

Шаблон класса,ошибка TEMPLATE - C++
Вечер добрый,с таким вопросом. Задание: шаблон класса &quot;однонарпавленный линейный список&quot;. И использовать его при составлении программы,...


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

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru