Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 13
1

Ошибка при записи в открытый член класса

05.04.2015, 01:35. Показов 1064. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется ниже представленный класс. Создаю его экземпляр и хочу использовать в функции. В этой функции устанавливаю значения для переменных m, xS. Но вместо этого программа выдает ошибку, что записать по этому адресу нельзя ничего. В чем причина?

Delphi
1
2
3
4
5
6
7
8
9
10
Contour = class
  public
    xA : dArray;
    yA : dArray;
    zA : dArray;
    m  : integer;
    xS : double;
    constructor Create(last : integer);
    // .....
  end;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2015, 01:35
Ответы с готовыми решениями:

Запрет записи в член класса
Приветствую. В классе создается общедоступная переменная (секция public). Возможно ли сделать так,...

Ошибка при записи в список класса
Привет,форумчане.В общем, есть dataGridView с данными. Нужно записать в список класса данные из...

Запросить у пользователя подтверждение при записи изменений в открытый файл
Я создал примитивный текстовой редактор! И стоит задача: запросить у пользователя подтверждение при...

Ошибка при записи в файл данных из обьекта класса
#include <iostream> #include <conio.h> #include <fstream> using namespace std; class Vector...

14
пофигист широкого профиля
4735 / 3168 / 860
Регистрация: 15.07.2013
Сообщений: 18,255
05.04.2015, 01:39 2
Цитата Сообщение от aaveNs Посмотреть сообщение
Создаю его экземпляр
Вот именно код создания этого экземпляра и нужно было привести в вопросе. А не описание класса.
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 13
05.04.2015, 01:42  [ТС] 3
Delphi
1
2
var
    newC : Contour;
0
пофигист широкого профиля
4735 / 3168 / 860
Регистрация: 15.07.2013
Сообщений: 18,255
05.04.2015, 01:51 4
Цитата Сообщение от aaveNs Посмотреть сообщение
var
newC : Contour;
А вот это никак не создание экземпляра класса. Это объявление переменной, в которую может быть автор программы запишет ссылку на созданный экземпляр класса.
А создание экземпляра класса в общем случае это код типа
Delphi
1
"Имя переменной_ссылки":="Имя_класса".Create("тут следуют нужные параметры для правильного создания сего экземпляра");
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 13
05.04.2015, 01:52  [ТС] 5
окей,
Delphi
1
newC := Contour.Create(29);
0
пофигист широкого профиля
4735 / 3168 / 860
Регистрация: 15.07.2013
Сообщений: 18,255
05.04.2015, 02:00 6
Цитата Сообщение от aaveNs Посмотреть сообщение
окей,
newC := Contour.Create(29);
Ну и что значит твой окей? Что ошибка пропала или что?
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 13
05.04.2015, 02:02  [ТС] 7
нет, это все было прописано
попросил показать, как создаю экземпляр - держи. В Delphi я уже запутался что у него зачем и куда, честно говоря.
0
пофигист широкого профиля
4735 / 3168 / 860
Регистрация: 15.07.2013
Сообщений: 18,255
05.04.2015, 02:08 8
Цитата Сообщение от aaveNs Посмотреть сообщение
В Delphi я уже запутался что у него зачем и куда, честно говоря.
Ну тогда приводи полный код. К сообщению можно прикрепить файл с архивом проекта.
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 13
05.04.2015, 02:14  [ТС] 9
..........
Вложения
Тип файла: rar cont.rar (200.1 Кб, 3 просмотров)
0
пофигист широкого профиля
4735 / 3168 / 860
Регистрация: 15.07.2013
Сообщений: 18,255
05.04.2015, 02:28 10
Ну да. Понимаю, что сам попросил привести код - сам и отвечай. Но в том коде разбираться в третьем часу ночи - у меня нет ни сил, ни желания. Завтра может разберусь, если кто-то другой не разберётся раньше меня.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,160
Записей в блоге: 20
05.04.2015, 05:57 11
Лучший ответ Сообщение было отмечено aaveNs как решение

Решение

ну, я запустил.
что делает код, не знаю, там не подписано, каша в наименованиях и перемешивание ООП с процедурами и глобальными переменными.
нажал кнопку, ошибки нет.
что не так? не знаю.

тогда претензии общего порядка, из-за которых это не взлетит никогда:
1.названия типов начинать с буквы Т чтобы отличать их от переменных
2.не использовать глобальные переменные и функции без КРАЙНЕЙ необходимости (а тут её точно нет)
3. в названиях методов, функций, процедур, принято использовать глаголы, чтобы знать, что эта штука "делает"
(примеры - Reset, Read, Open, неправильно - IntersectionY, Parser и т.д.)
4. если в конструкторе мы нахапали памяти под массивы, то нужно написать и деструктор, где аккуратно подтереть за собой:
Delphi
1
2
3
4
5
destructor TContour.Destroy;
begin
  SetLength(arr,0);
  inherited Destroy;
end;
5. Апофеоз беспредела - это метод класса, в который параметром передается экземпляр этого же класса.
Delphi
1
newC.createArrays(5, newC);
Ты удивишься, но ООП делает это за тебя. В методе класса есть неявная переменная Self, которая как раз и есть тот объект, чей метод ты вызвал. Но тебе это здесь совершенно не нужно.
Delphi
1
newC.createArrays(5);
вот так. и всё.
6. вызов из newC.createArrays процедуры
Delphi
1
procedure Parser( FileName : string; ContourNumber : integer; var inc : Contour );
говорит нам только о том, что это должно быть методом класса TContour
7. использование глобального массива temp из метода CreateArrays тоже недопустимо

итог.
все глобальные переменные и процедуры должны стать полями и методами либо TForm1 либо TContour
Contour переименовать в TContour, dArray - в TDArray;
после этого еще раз сюда...
1
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 13
05.04.2015, 09:50  [ТС] 12
Я понимаю, что код там полнейшая каша, но эту работу мне сдать и забыть. Вот на счет передачи самого объекта функции согласен, это я намудрил, не мог определить как обратится методе к этому объекту (привык, что обращение по this). За зачистку после дня разбора иногда беспричинных ошибок (пару раз начало работать, после простой копии в новый файл) уже как-то и не думал)
Кстати, наименования мне казалось довольно понятны, наоборот.
И спасибо за помощь!
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 13
05.04.2015, 13:56  [ТС] 13
вот исправленный по рекомендациям код.
работает правильно при LAST <= 10, если ставить до 11 или больше - начинает выдавать ошибку. Возможно, где-то выход за границы массива, но на какой именно строке ошибка не показывает.
Вложения
Тип файла: rar cont2.rar (201.0 Кб, 1 просмотров)
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 13
05.04.2015, 14:05  [ТС] 14
krapotkin, спасибо еще раз за советы. Организовав все более логично, легко обнаружил, что порождало ошибку (банально опечатался в названии массива, когда задавал длину). Вопрос решен.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,160
Записей в блоге: 20
05.04.2015, 14:13 15
на здоровье
0
05.04.2015, 14:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2015, 14:13
Помогаю со студенческими работами здесь

Функция-член Ошибка класса
Непонятная ошибка связанная с функцией-членом. Я в панике + почему-то не могу внести хедер с...

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

Ошибка, если QString член класса
Добрый день. Пишу калькулятор. Если в описании класса делаю QString членом класса, то ошибка: ...

Ошибка при добавлениии шаблона в открытый файл Excel
При добавлении нового листа с шаблоном из файла выдается ошибка , код программы ...


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

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