Własne funckje

dział ogólny

Własne funckje

Nowy postprzez mko000 » środa, 13 stycznia 2010, 22:43

Może to banalne pytanie ale gdy tworze sobie nową funkcję np
int wiadomosc( String msg, int lenght ) to zaden komponent w tej funkcji nie działa dlaczego ?
Avatar użytkownika
mko000
Homos antropiczny
Homos antropiczny
 
Posty: 74
Dołączył(a): sobota, 19 grudnia 2009, 00:30
Podziękował : 35
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2010
    Windows XPChrome

Re: Własne funckje

Nowy postprzez Cyfrowy Baron » środa, 13 stycznia 2010, 22:52

Nie wystarczy stworzyć funkcji trzeba ją jeszcze wywołać, np:

Kod: Zaznacz cały
int wiadomosc( String msg, int lenght )
{
ShowMessage(ms);
}
//-----------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  wiadomosc("Treść wiadomości", NULL);
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Własne funckje

Nowy postprzez polymorphism » czwartek, 14 stycznia 2010, 12:01

mko000 napisał(a):[...] zaden komponent w tej funkcji nie działa dlaczego ?

Dlatego, że funkcja to nie metoda, nie ma dostępu do składników klasy.

Co to jest funkcja, metoda i klasa znajdziesz w każdej książce o C++.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
mko000
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Własne funckje

Nowy postprzez Cyfrowy Baron » czwartek, 14 stycznia 2010, 12:30

Dlatego, że funkcja to nie metoda, nie ma dostępu do składników klasy.


ale może mieć dostęp poprzez argumenty, np:

Kod: Zaznacz cały
void __fastcall WriteToMemo(TMemo *Memo, String Text)
{
Memo1->Text = Text;
}
//-------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WriteToMemo(Memo1, "Jakiś tekst");
}


Poza tym jeżeli funkcja zostanie zadeklarowane jako składnik klasy to ma dostęp do wszystkich obiektów, funkcji, zmiennych itp. przynależących do tej klasy.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
mko000
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Własne funckje

Nowy postprzez wargo » piątek, 15 stycznia 2010, 16:54

Albo dopisz Form1-> przed nazwą komponentu np.
Kod: Zaznacz cały
Form1->Memo->Lines->Add(msg);

Za ten post autor wargo otrzymał podziękowanie od:
mko000
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
Podziękował : 12
Otrzymał podziękowań: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    WindowsMozilla

Re: Własne funckje

Nowy postprzez mko000 » piątek, 29 stycznia 2010, 12:04

Wlasnie nic mi sie nie udaje. Mam tak (najprościej jak się da):
Kod: Zaznacz cały
void __fastcall TForm1::Button1Click(TObject *Sender)
{
przycisk("OK");
}
//---------------------------------------------------------------------------
void przycisk(String ok){
Form1->Button1->Caption = ok;
}

I mam takie błędy:
Kod: Zaznacz cały
Checking project dependencies...
Compiling Project1.cbproj (Debug configuration)
[BCC32 Error] Unit1.cpp(19): E2268 Call to undefined function 'przycisk'
  Full parser context
    Unit1.cpp(18): parsing: void _fastcall TForm1::Button1Click(TObject *)
Failed
Elapsed time: 00:00:00.5

Co jest nie tak ?
Avatar użytkownika
mko000
Homos antropiczny
Homos antropiczny
 
Posty: 74
Dołączył(a): sobota, 19 grudnia 2009, 00:30
Podziękował : 35
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2010
    Windows XPFirefox

Re: Własne funckje

Nowy postprzez polymorphism » piątek, 29 stycznia 2010, 12:10

Najpierw używasz, później definiujesz/deklarujesz. Powinno być odwrotnie, nie sądzisz?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Własne funckje

Nowy postprzez mko000 » piątek, 29 stycznia 2010, 12:48

faktycznie nie zwróciłem na to uwagi. jezscze jedno pytanko jak mam używać funkcji buttonclick mojej funkcji ?
Form1->Button1Click(TObject *Sender); nie działa
Kod: Zaznacz cały
Checking project dependencies...
Compiling Project1.cbproj (Debug configuration)
[BCC32 Error] Unit1.cpp(45): E2108 Improper use of typedef 'TObject'
[BCC32 Error] Unit1.cpp(45): E2451 Undefined symbol 'Sender'
Failed
Elapsed time: 00:00:05.7
Avatar użytkownika
mko000
Homos antropiczny
Homos antropiczny
 
Posty: 74
Dołączył(a): sobota, 19 grudnia 2009, 00:30
Podziękował : 35
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2010
    Windows XPFirefox

Re: Własne funckje

Nowy postprzez polymorphism » piątek, 29 stycznia 2010, 13:05

A czy tak się wywołuje funkcje/metody w C/C++?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Własne funckje

Nowy postprzez mko000 » piątek, 29 stycznia 2010, 13:14

Pamiętam że kiedyś piałem Form1->Button1Click(this);
ale to też nie działa
Avatar użytkownika
mko000
Homos antropiczny
Homos antropiczny
 
Posty: 74
Dołączył(a): sobota, 19 grudnia 2009, 00:30
Podziękował : 35
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2010
    Windows XPFirefox

Re: Własne funckje

Nowy postprzez polymorphism » piątek, 29 stycznia 2010, 13:56

Nie działa, bo? Pisz konkretnie.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Własne funckje

Nowy postprzez Cyfrowy Baron » piątek, 29 stycznia 2010, 14:08

Pamiętam że kiedyś piałem Form1->Button1Click(this);


To musi działać! Prosty test:

Kod: Zaznacz cały
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage("Wciśnieto przycisk: " + dynamic_cast<TButton*>(Sender)->Name);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Button1Click(Sender);
}
//---------------------------------------------------------------------------


Zwykły polimorfizm, nie może nie działać, ale jeżeli tworzysz własną funkcję i chcesz odwołać się poprzez tą funkcję do jakiegoś zdarzenia, to musisz w nagłówku tej funkcji umieścić argument typu TObject, np:

Kod: Zaznacz cały
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage("Wciśnieto przycisk: " + dynamic_cast<TButton*>(Sender)->Name);
}
//---------------------------------------------------------------------------
void __fastcall MojaFunkcja(TObject *Sender)
{
Form1->Button1Click(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
MojaFunkcja(Sender);
}
//---------------------------------------------------------------------------
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Własne funckje

Nowy postprzez rafalskraba » wtorek, 2 marca 2010, 01:04

mko000 napisał(a):Może to banalne pytanie ale gdy tworze sobie nową funkcję np
int wiadomosc( String msg, int lenght ) to zaden komponent w tej funkcji nie działa dlaczego ?


Deklarowana przez Ciebie funkcja zwraca typ typu int co dla mnie jest troszkę dziwne ponieważ tak przypuszczam, mogę się mylić co do Twoich intencji ale nazwa funkcji sugeruje że chcesz przy jej pomocy zwrócić jakiś komunikat. Staraj się określać nazwy funkcji precyzyjnie dobierając do tego odpowiednio zwracane typy np.:
1. funkcja sumujaca: funkcja zwraca typ double pobiera 2 argumenty int zmienna_a, zmienna_b;
Kod: Zaznacz cały
double suma (int zmienna_a, int zmienna_b)
{
   return (zmienna_a+zmienna_b)
}

2. funkcja wiadomosc - jak podales zmienilem tylko typ zwracany przez funkcję
Kod: Zaznacz cały
void wiadomosc(String msg, int lenght)
{
   if(lenght<=10)
   {
      ShowMessage("Komunikat "+msg);
   }else
   ShowMessage("komunikat 1"+msg);
}


Przykład użycia funkcji wiadomość:
Kod: Zaznacz cały
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   int zmienna=11;
   wiadomosc("abc",zmienna);
}


Funkcje możesz również deklarować w klasach.
"Jednym z rodzajów szczęśliwości jest zdolność podejmowania dobrych decyzji."

- Platon-
Avatar użytkownika
rafalskraba
Intelektryk
Intelektryk
 
Posty: 122
Dołączył(a): czwartek, 5 marca 2009, 10:20
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows 7 x64
Kompilator: RAD Studio XE2 Update 4 HotFix 1
SKYPE: rafal.skraba
Gadu Gadu: 0
    Windows 7Firefox


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości