Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];

Вниз

Проблема с доступом к private-членам класса   Найти похожие ветки 

 
DJones   (2008-10-13 11:09) [0]

Вот такой класс, при попытке обратиться к  private - массивам в методах GetReg ил setReg  получаю Instance variable is inassessible here... Никак не могу понять, в чем моя ошибка ...

unit MyConfig;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type // ôîðìà
 TMainForm = class(TForm)
 private
   { Private declarations }
 public
   { Public declarations }
end;

type
   rDataStructure = record
   reg             :Byte;
   value           :Byte;
  end;

TDataArray = array [1..30] of rDataStructure;

TDataArrayA = array [0..10] of rDataStructure;// ïîä ïàðàìåòðû ïîðòà ìîäóëÿ

type Config = class (TObject)

private

        dataArrA            : array [0..5] of TDataArrayA;
        dataarrayB          : array [0..33] of rDataStructure;

public

        constructor  Create;
        class function getReg (port, reg: byte) : byte;
        class function setReg (port, reg, value : byte) : Boolean;
end;

var
 MainForm: TMainForm;

implementation

{$R *.dfm}

class function Config.getReg (port, reg: byte) : Byte;
var i : integer;
begin

end; // Getreg

constructor Config.Create;
var port, i: Integer;
begin

dataArrA[0][1].reg:=0;

end; // Create

class function Config.setReg (port, reg, value : byte) : Boolean;

var i : integer; // ïðîñòî ñ÷åò÷èê äëÿ öèêëà

begin

//dataArrA[0][1].reg:=0;

end; // SetReg

end.


 
DJones   (2008-10-13 11:11) [1]

Помогите, пожалуйста, разобраться с этим примером!


 
Поросенок Винни-Пух ©   (2008-10-13 11:12) [2]

методы класса не имеют доступа к любым полям этого класса. не только приватным


 
Сергей М. ©   (2008-10-13 11:12) [3]

Убери слово "class" из деклараций методов getReg и setReg


 
Ega23 ©   (2008-10-13 11:13) [4]

Чем class function от просто function отличается - знаешь?


 
DJones   (2008-10-13 11:19) [5]

нет, я сишник, в паскале вообще не бумбум пока что(((


 
DJones   (2008-10-13 11:25) [6]

Разве метод КЛАССА не должен иметь доступа к private полям класса?


 
DJones   (2008-10-13 11:32) [7]

я на измене, я на измене


 
Поросенок Винни-Пух ©   (2008-10-13 11:32) [8]

сам-то подумай.
для вызова классового метода не нужен экземпляр.
и из какого именно экземпляра из сотни уже созданных он должен брать значение поля?


 
Поросенок Винни-Пух ©   (2008-10-13 11:34) [9]

class function это то, что у еретиков называется статиком


 
DJones   (2008-10-13 11:37) [10]

ок, спасибо,понял!


 
DJones   (2008-10-14 15:02) [11]

Еще одна прблема в данной проге - после выполнения конструктора приходит "Asess violation  ... at module", все проверил, даже с пустым телом конструктора то же самое... Объект класса создается в другом юните, в uses которого модуль MyConfig прописан ....


 
Ega23 ©   (2008-10-14 15:23) [12]


> после выполнения конструктора приходит "Asess violation
>  ... at module", все проверил, даже с пустым телом конструктора
> то же самое... Объект класса создается в другом юните, в
> uses которого модуль MyConfig прописан ....


Это означает, что ты обращаешься к чему-то, ещё не созданному (или непроинициализированному), или уже убитому, но с сохранением указателя.

Очень помогает F7-F8.


 
DJones   (2008-10-14 15:33) [13]

В конструкторе я обязан проинициализировать ВСЕ поля класса?


 
Плохиш ©   (2008-10-14 15:37) [14]


> DJones   (14.10.08 15:33) [13]
> В конструкторе я обязан проинициализировать ВСЕ поля класса?

Если они являются указателями, то - да.


 
Плохиш ©   (2008-10-14 15:39) [15]


> DJones   (14.10.08 15:02) [11]
> Еще одна прблема в данной проге - после выполнения конструктора
> приходит "Asess violation  ... at module", все проверил,
>  даже с пустым телом конструктора то же самое... Объект
> класса создается в другом юните, в uses которого модуль
> MyConfig прописан ....

Бессмысленные слова, не имеющие никакого отношения к проблеме.


 
DJones   (2008-10-14 15:42) [16]

Совершенно верно, проблему нашел - криво вызывал конструктор - mc.Create вместо  mc:=Config.Create


 
Сергей М. ©   (2008-10-14 15:59) [17]


> DJones   (14.10.08 15:33) [13]


Не обязан.
Они автоматически заполняются нулями (в тех или иных ипостасях нуля).


 
Leonid Troyanovsky ©   (2008-10-14 22:49) [18]


> DJones   (14.10.08 15:42) [16]

> Совершенно верно, проблему нашел - криво вызывал конструктор
> - mc.Create вместо  mc:=Config.Create

http://podgoretsky.com/OtherParts/DM/BadTips.aspx?#08

--
Regards, LVT.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
2-1223801070
KTA
2008-10-12 12:44
2008.11.23
Вывод на печать


2-1223627971
Zlo
2008-10-10 12:39
2008.11.23
Транзакции


4-1200394661
Lamer666
2008-01-15 13:57
2008.11.23
Как организовать таймер в программе без формы?


15-1222355428
БарЛог
2008-09-25 19:10
2008.11.23
Алгоритмы поиска частей лица


1-1202591077
NaRuTo
2008-02-10 00:04
2008.11.23
Нестандартный ListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский