Консультация № 172229
16.09.2009, 11:53
0.00 руб.
0 12 0
Здравствуйте эксперты, помогите пожалуйста
при выполнении строки:
w.finish.date=MonthCalendar1->Date;
ничего не происходит
w-мой класс
finish - создал свою структуру
После выполнения строки значение не меняется, тоже самое если пользуюсь методом класса, пока трассирую внутри метода класса переменная finish.date меняется, как только ухожу обратно, откуда вызвал этот метод w.finish.date опять тоже, равна нулю, до этого ни разу еще в процессе программы не использовалась, конструктора у класса нет
Пишу на Borland C++ Buider, система Windows XP

Обсуждение

Неизвестный
16.09.2009, 11:54
общий
finish-переменная созданной структуры
Неизвестный
16.09.2009, 12:47
общий
Пожалуй, таких слов маловато. Как описан класс w? Хотя бы его объявление приведите
Неизвестный
16.09.2009, 12:58
общий
вот описание класс


Код:

class work
{

public: //описание полей кадра
char fam[20]; //фамилия заказчика
char name[20]; //имя заказчика
char otch[20]; //отчество заказчика
int number_sortir; //номерная сортировка
int kod_zakazchik; //код заказчика
int kod_kontora; //код конторы
int kod_predmet; //код предмета
int cost; //стоимость заказа
Day get; //день и время поступления
Day end; //срок сдачи
Day finish; //день когда заказ выполнен, но не сдан еще
Day put; //день когда заказ сдан
double tel[3]; //список телефонных номеров заказчика
int com_length; //длинна коментария
char commentary[1000]; //коментарий




/// список функций
void clear();
/// функции работы с файлом
int jump(int,const char*); //возращает номер 1ого байта следующей записи
int get_NumberRecord(int); //возращает номер байта начинаю с которого идет
//информация о нужной записи
int get_RecordNumber(int); //возращает физический номер кадра
// сортировкой передоваемой в параметре

void load_obj(int,const char*); //считывает запись находящуюся по данному адресу
void write(const char*); //осуществляет запись в файл
//текущих значений обьекта как надо:
//1) в конец 2)переписывает длинну файла и т.д.
int write_obj(int,const char*); //передается номер байт начинаю с которого надо
//записать текущие значения обьекта в файл
void load (int,const char*); //загружает i-запись из файла,
//либо физически, либо по номеру
void sortirovka(int); //выполняет пересортировку номеров,
//передается код сортировки
void end_write(void); //запись в конец файла
int get_phis(void); //узнать физическую сортировку
int get_number(const char*); //узнать номерную сортировку
void go_position(void); //подьем в файле до нужной позиции

void vipramit (void); // "выпрямляет файл", нумерная сортировка
// становить физической
void perepisat_bez(int); //переписать файл без одного, номер которого
//передан в параметре
void chack_put(int); //отметка о том что файл отдан
void chack_finish(int); //отметка о том что заказ сделан
int get_length(void); //узнать кол-во записей в файле
int get_group(int); //возрашает группу параметра (имена, дата и т.д.)
void get_atr(int,char*,int *);
int change(int,char*,char*,int*,int*);
void fiz_num();
void grid_write(TStringGrid *);

///функции опроса

void get_GetDay(void); //занести день, когда был получен заказ
void get_EndDay(TMonthCalendar *); //занести день, когда надо отдать заказ
void get_FinishDay(TMonthCalendar *); //занести день, когда был сделан заказ
void get_PutDay(TMonthCalendar *); //занести день, когда был отдан заказ
int get_telephone(AnsiString, int); //занести телефоны заказчиков
int get_name(TLabeledEdit *,TLabeledEdit *,TLabeledEdit *); //занести ФИО заказчика
int get_cost(AnsiString); //занести стоимость
int get_kod_predmet(int); //занести код предмета
void get_comentary(TMemo *); //занести коментарий
void show(TMemo *);
};


а также структура
Код:

struct Day
{
int date;
int time;
} ;



Неизвестный
16.09.2009, 13:34
общий
Хм, объявлен public... Остается вариант, что в методе объявлена локальная переменная с этим же именем, скорее всего в get_GetDay
А другие поля записываются?
Неизвестный
16.09.2009, 13:41
общий
поле time тоже не заполняется и для finish и для put
я не могу понять, пока я внутри метода, поля изменяются у объекта изменяются: и date и time
как только метод заканчивается и попадаю на то места, откуда он был вызван, то переменные w.finish.date и time нули
Неизвестный
16.09.2009, 13:53
общий
А если сделать методы не void, а Day?
Неизвестный
16.09.2009, 13:53
общий
я кое-что заметил:
у меня в проекте 3 формы, 3 сегодня создала, и на ней как раз нужно заполнять вот эти поля про которые я пишу, сейчас поглядел, поля которые раньше менял тоже не меняются.
в unit2 объявленна переменная w как extern
extern work w;
на остальных 2ух формах просто work w.
но вот менять ее значение на форме 1 получается, а на форме 3 не меняется, как вот я пишу тут
Неизвестный
16.09.2009, 13:54
общий
не понял, что значит не void, а day
Неизвестный
16.09.2009, 13:54
общий
И потом!!! Вы производите присвоение не полю класса, а полю ЭКЗЕМПЛЯРА класса!
Неизвестный
16.09.2009, 14:02
общий
Возвращаемое значение
и тогда писать типа
finish = get_GetDay();
Неизвестный
16.09.2009, 14:53
общий
так внутри метода значение менеятся же, тоесть пока трассирую участок кода
пока трассирую
Код:
void work::get_FinishDay(TMonthCalendar *Month)
{
finish.date=Month->Date;
finish.time=StrToTime(Time());
};

значение finish.date и finish.time меняются, а как только возвращаюсь из метода, опять старое значение

А еще пробовал следующее:

w.get_FinishDay(MonthCalendar1);
w.finish.date=MonthCalendar1->Date;
w.finish.date=5;
ShowMessage(FloatToStr(w.finish.date=5));
ни одна из команд не поменяла значения, хотя ShowMessage вывело цифру 5 а не с нулем
и другие поля экземпляра класса на этой форме не меняются.
Неизвестный
16.09.2009, 15:03
общий
странно, добавил изменил описание work w на extern work w, в Unit1, начало менять, раньше когда не было формы 3, писалась ошибка, такая же ошибки сейчас пишется если я пытаюсь уже в Unit3 вместо work w, писать extern work w
Ошибка такая:
[Linker Error] Unresolved external '_w' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\РАБОТА\UNIT1.OBJ
Форма ответа