Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 7
1

Реализовать создание объекта класса с нужными параметрами

15.04.2014, 23:53. Показов 719. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Массивы в классе и проблемы с конструкторами


Необработанное исключение NullReferenceException, Исключение, возникающее при попытке разыменования указателя NULL на объект. Ссылка на объект не указывает на экземпляр класса.
Предлагаю куски кода класса Bankom.h, Bankom.cpp (там уже мало чего осталось), и Form4.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
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
//-----класс Bankom.h
#include "stdafx.h"
 
#ifndef Bankom_H
#define Bankom_H
 
class CBankom{
public:
   
        CBankom () {                  //конструктор без параметров
                nominals = new int [n];           //как мне кажется, где-то это нужно описать, 
                amountNom = new int [n];          //избавляет от NuLL указатели, но не объект класса
                givenNomNow = new int [n];
                for (int i = 0; i<n; i++) {        // пусть будет заполнен 0?
                        nominals[i] = 0;
                        amountNom[i] = 0;
                        givenNomNow[i] = 0;
                }
 
        };             
        ~CBankom () {                    //деструктор
                for (int i = 0; i < n; i++){
                        delete[] nominals;
                        delete[] amountNom;
                        delete[] givenNomNow;
                }
        };
        CBankom (int *nom,int *amount, int *givenN) {                   //конструктор с параметрами
                for(int i = 0; i < n; i++){
                nominals[i] = nom[i];
                amountNom[i] = amount[i];
                givenNomNow[i] = givenN[i];
        }
        }
        int allMoney (int*, int*);  // подсчет всей наличности банкомата
        int allGiven(int*, int *);   // подсчет отданных средств
        int ShowNominals();             //отображение номинала банкнот
 
private:
        //int nominals[n];     // номиналы банкнот
        //int amountNom[n];    // изначальное количество банкнот
        //int givenNomNow[n];  // количество выдаваемых банкнот по транзакции текущей карты
        int *nominals;               //свойства класса - указатель на инт
        int *amountNom;
        int *givenNomNow;
                //nominals = new int [n];
                //amountNom = new int [n];
                //givenNomNow = new int [n];
};
 
extern CBankom RunBankom;                    //глобальный объект класса, если есть лучше идея, предложите.
                                                      //синглтон можно, если он позволит изменять свои поля, и создаваться из    
                                                       // файла при запуске
 
#endif
//---------------------------
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
//------Bankom.cpp----------------
 
#include "stdafx.h"
#include "Bankom.h"
 
CBankom RunBankom;        //тот же общий объект
 
//CBankom::CBankom (int *nom,int *amount, int *givenN) {
/*CBankom::CBankom (int *nom,int *amount, int *givenN) {
    for(int i = 0; i < n; i++){
        nominals[i] = nom[i];
        amountNom[i] = amount[i];
        givenNomNow[i] = givenN[i];
    }
}*/
 
int CBankom::allMoney(int *nom, int *amount) {             //подсчет всех денег банкомата
    int Money = 0;
    for (int i=0; i<n; i++) {
        Money += nom[i] * amount[i];
    }
        return Money;
}
 
int CBankom::allGiven(int *nom, int *amountg) {                  // подсчет всех выданных денег
    int Money = 0;
    for (int i=0; i<n; i++) {
        Money += nom[i] * amountg[i];
    }
        return Money;
}
 
int CBankom::ShowNominals() {             //понять и простить, я не знаю, как я буду это использовать
    return nominals[n];
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//---------Form4.h  Пополнение банкомата "инкассацией"
...
//тут же создается объект класса, но планируется создавать при запуске приложения путем считывания с файла, а тут только пополнять
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                                // Nominals = new int [n];
                                //Kol = new int [n];
                                //GivenN = new int [n];
                                int Nominals[n] = {50000,100000,200000};
                                int Kol[n] = {20,20,20}; /*{Convert::ToInt32(textBox1->Text),
                                                          ,onvert::ToInt32(textBox2->Text),
                                                          Convert::ToInt32(textBox3->Text)};*/
                                int GivenN[n] = {0,0,0};
                 //дабы избавиться от экстерна:
                                CBankom RunBankom /*= new CBankom()*/;           //при раскомменченном, не может преобразовать CBankom* в CBankom. 
//при закомменченном искренне надеюсь, что вызывается конструктор без параметров, здесь же NULL вылазит и на этом все. "Ссылка на объект не указывает на экземпляр класса" , т.е. я этот экземпляр не создаю на самом деле
                                //RunBankom = CBankom();
                                RunBankom = CBankom (Nominals, Kol, GivenN);          //вызываю конструктор с параметрами
                                this->Close();
}
Добавлено через 12 часов 50 минут
i 0 int
+ nom 0x0030E3E0 int*
nom[i] 50000 int
+ nominals 0x6A8F83B4 int*
nominals[i] 136598667 int
+ this 0x0030E3D0 { nominals=0x6A8F83B4 amountNom=0xFFFFFFFF givenNomNow=0x6A3D1F8E } CBankom*

почему nominals[i] 136598667 int? откуда такое число?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2014, 23:53
Ответы с готовыми решениями:

Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами
Привести пример класса с конструктором и деструктором, созданием экземпляра класса с помощью...

Вызов функции с не заданными параметрами из объекта класса
Пишу небольшое API, для себя. Сделал следующие: программист указывает объекту класса, имя пакета и...

Формирование картинки с нужными параметрами
Необходимо сформировать сертификат с датой и именем. Получение даты и имени не вопрос. Но сам...

Вызвать функцию с нужными параметрами
Привет, запутался окончательно... Сам в jq, мягко говоря, тук-тук, но сделать дело надо, а изучать...

5
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
16.04.2014, 00:22 2
Тяжеловато так с ходу врубиться. Ну с чего-то начну.
Откуда n берется в конструкторе? Тем более в стандартном.
0
Неэпический
18099 / 10685 / 2061
Регистрация: 27.09.2012
Сообщений: 26,897
Записей в блоге: 1
16.04.2014, 00:27 3
C++
1
2
3
4
5
6
7
8
        CBankom () {                  //конструктор без параметров
                nominals = new int [n];           //как мне кажется, где-то это нужно описать, 
                //...
        }
//...
int CBankom::ShowNominals() {
    return nominals[n]; //<-- Выход за пределы
}
Добавлено через 1 минуту
Цитата Сообщение от Elen123321 Посмотреть сообщение
C++
1
System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
c++/cli? вот это помесь
0
Заблокирован
16.04.2014, 01:12 4
Что такое n?
Похоже на константу. Так введите ее как
const int n = сколько-то там;
0
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 7
16.04.2014, 09:39  [ТС] 5
visual studio 2010, windows forms application

const int n = 3 пришлось заменить на enum { n = 3}; в stdafx.h. Прошу прощения, забыла добавить сюда.
0
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 7
20.04.2014, 01:25  [ТС] 6
Заменила CBankom (int *nom,int *amount, int *givenN) на Set(int *givenN, int *amount, int *nom).
И в деструкторе был ненужный цикл
0
20.04.2014, 01:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2014, 01:25
Помогаю со студенческими работами здесь

Реализовать оператор= для присваивания объекта класса-потомка объекту базового класса
Есть два класса A и B, причем класс B является потомком A. Как реализовать следующее: obj_A = obj_B...

Запуск CMD консоли из формы с нужными параметрами
Здравствуйте! Нужно сделать так, что бы по нажатию на кнопку открывалась консоль, в неё...

Реализовать описание метода класса с заданными параметрами
У меня такая проблема: У меня есть класс матриц, мне нужно описать метод(фунцию или процедуру), на...

Настройка внешнего отчета (запуск ОСВ с нужными параметрами)
Добрый день! Есть внешний отчет ОСВ по счету, необходимо сделать, чтобы она формировалась только...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru