Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

C++ builder споделяне на променливи
http://mcu-bg.com/mcu_site/viewtopic.php?f=16&t=15243
Страница 1 от 3

Автор:  slav4o.com [ Вто Май 09, 2017 1:43 pm ]
Заглавие:  C++ builder споделяне на променливи

Имам една програма със 2 форми Form1 и Form2. Имам и променлива unsigned char variable1 декларирана във Unit1.cpp (където се пишат кодовете на Form1) . Когато я променям от Unit1.cpp си се променя, но когато реша да я променям от Unit2.cpp не ще да я променя. Но пък я открива, не ми дава грешка, че няма такава.

Автор:  Цецо [ Вто Май 09, 2017 3:39 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

Ми така е, като се учи език за програмиране посредство уизърди.

На обектите им викат форми, не знаят що е то област на видимост на променлива...

Най - просто ( и най-грозно ) е да декларираш някъде една глобална променлива и да я мажеш от където ти падне. Ще питаш как - ами с уизърд не знам как става :)

Автор:  slav4o.com [ Вто Май 09, 2017 5:17 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

Ами декларирах една глобална променлива variable1 в хедъра Unit1.h . Излиза ми като Form1->variable1 . Когато напиша Form1->Variable1 = 1; // във Unit1.cpp всичко работи. Когато го напиша във Unit2cpp се компилира пак. Но когато пусна програмата ми и натисна бутона във Form2 който прави Form1->Variable1 = 1; ми дава грешка "Access violation at address 00403785 in module "Programa.exe". Write of address 00000320" :|

Автор:  ToHu [ Вто Май 09, 2017 5:31 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

как ще ти е глобална в unit1.h .... и как всъщност я декларира ?

Автор:  slav4o.com [ Вто Май 09, 2017 8:50 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

Код:
        void __fastcall FormCreate(TObject *Sender);
private:   // User declarations
public:      // User declarations
        __fastcall TForm1(TComponent* Owner);
        unsigned char Variable1;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Ето частта от Unit1.h
ами така го направих, като рових в нета намерих описано по такъв начин. Във programa.cpp няма public
Иначе си го направих по бабешкия начин, бутона вика функция която е във Unit1.cpp и от там си я сетва локално вариаблата. Но въпроса е принципен, а и не е културно направено някак, но пък като не са ми ясни нещата... :(

Автор:  ToHu [ Вто Май 09, 2017 9:07 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

я покажи целия .h файл, това ли ти е основната да я наречем форма ? Това не съм го пипал от 10 години, то вече не беше ли нещо друго, да не е борланд ?

Автор:  bateAz [ Вто Май 09, 2017 9:13 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

Form1 създадена ли е преди да си викнал Form1->п му м... ? Хедър файлът с описанието на класа Form1 видим ли е от Form2 ?

Автор:  ToHu [ Вто Май 09, 2017 9:17 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

Абе аз затова исках да видя целия хедър на 1 ... в крайна сметка в форм 2 инцлудва ли някъде този на форм 1 или няой друг който да му казва че има такава променлива ?

Автор:  slav4o.com [ Вто Май 09, 2017 9:22 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

Borland C++ builder 4 (Да старичко е доста, но едва ли това е проблема)
Form1 е основната, Form2 се прави видима с бутон намиращ се във Form1.
във Unit1.cpp има
Код:
#include "Unit1.h"
#include "Unit2.h"

във Unit2.cpp има
Код:
#include "Unit2.h"
#include "Unit1.cpp"
#include "Unit1.h"

Unit1.h
Код:
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <NMsmtp.hpp>
#include <Psock.hpp>

//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:   // IDE-managed Components
        TGroupBox *DeviceBox;
        TGroupBox *EventBox;
        TMemo *EventMemo;
        TGroupBox *UserBox;
        TButton *delButton;
        TEdit *Edit1;
        TGroupBox *GroupBox1;
        TGroupBox *GroupBox2;
        TListBox *DeviceListBox;
        TLabel *EventLabel;
        TButton *clrButton;
        TButton *Button1;
        TGroupBox *GroupBox3;
        TEdit *Edittime;
        TButton *Button4;
        TStaticText *StaticText1;
        TStaticText *StaticText2;
        TButton *Button3;
        TLabel *Label2;
        TButton *Button5;
        TButton *readButton;
        TTimer *Timer1;
        TButton *Button2;
        void __fastcall Timer1Timer(TObject *Sender);
        void __fastcall DeviceListBoxDblClick(TObject *Sender);
        void __fastcall syncButtonClick(TObject *Sender);
        void __fastcall autoreadButtonClick(TObject *Sender);
        void __fastcall delButtonClick(TObject *Sender);
        void __fastcall clrButtonClick(TObject *Sender);
        void __fastcall doubleButtonClick(TObject *Sender);
        void __fastcall Edit1Change(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall readButtonClick(TObject *Sender);
        void __fastcall Button4Click(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall Button5Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
private:   // User declarations
public:      // User declarations
        __fastcall TForm1(TComponent* Owner);
        unsigned int Variable1;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Автор:  bateAz [ Вто Май 09, 2017 9:30 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

това инклудване на .cpp файл къде си го учил? Да отидеш и да направиш рекламация на даскалите! Искай си обратно парите!

Автор:  slav4o.com [ Вто Май 09, 2017 9:33 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

Ами като го махна не ми разпознава фукциите дето съм ги описал в Unit1.cpp

Автор:  bateAz [ Вто Май 09, 2017 9:35 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

А ти във функциите писал ли си Form1::Kekava_funktsia() ... ? Обърни внимание на Form1::

Автор:  slav4o.com [ Вто Май 09, 2017 9:37 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

Във Unit1.cpp имам
Код:
void Funkciq(void)
{
alabala;
}
Така са описани моите функции и си се извикват успешно от Unit2.cpp

Автор:  bateAz [ Вто Май 09, 2017 9:39 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

slav4o.com написа:
Във Unit1.cpp имам
Код:
void Funkciq(void)
{
alabala;
}


Като бира без картофки .... Във хедър файла си описал фъкциите като мембъри на класа, в С файла си ги описал като свободно летящи. Не става. И с подкуп не става.

Автор:  slav4o.com [ Вто Май 09, 2017 10:38 pm ]
Заглавие:  Re: C++ builder споделяне на променливи

Голяма какаманга стана. Обърках се тотално.
Махнах #include Unit1.cpp и си заработи това с променливата. Обаче сега с функциите не мога да се оправя. Ползват се и от двете форми. От Unit2.cpp не се виждат. Къде и как да ги опиша ?

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/