Nie można zdefiniować funkcji za pomocą #define w borland C++

0

Witam jestem początkującym i robię właśnie jeden z moich pierwszych programów...
Problem mam taki że chciałbym użyć #define tak abym nie musiał wszystkiego kopiować i zmieniać jedną wartość, ale borland bierze funkcje w definicji preprocesora jako funkcje z klasy TForm

Ogółem to ten kod wygląda tak:

__fastcall getkey(int nVirtKey,int btn, AnsiString filename)
{
#define Button(x) Form1->Button##x##Click(Form1);
if(GetKeyState(nVirtKey))
{
if(filename!="")
{
Button(btn)
}
}
else { /* nieważne :> */ }
return 0;
}
#undef Button(x)

a borland na to odpowiada że funkcja ButtonbtnClick nie należy do TForm1

[C++ Error] Unit1.h(113): E2316 'ButtonbtnClick' is not a member of 'TForm1'

prosiłbym o w miarę proste wyjaśnienie :))
sorry za błędy gramatyczne, troszkę zapominam języka xd

3

#define definiuje makro, której jest po prostu podmianą tekstową. W formie TForm1 nie masz metody ButtonbtnClick

2

ps. gdybys z sensem wszystko nazywal i dzielil to nie potrzebowalbys tego typu makr.

4

To co próbujesz zrobić jest niewykonalne w ten sposób. Dlaczego?

  1. makra są podmieniane w czasie kompilacji (przed kompilacją, będąc poprawnym)
  2. w czasie kompilacji muszą być znane metody które chcemy wołać.
  3. wartość btn jest znana w runtime, czyli grubo po czasie kiedy wszystko ma być zrobione.
0

Problem mam taki że chciałbym użyć #define tak abym nie musiał wszystkiego kopiować i zmieniać jedną wartość,

Może szablon funkcji rozwiąże problem?
Szablony funkcji

0

Dzięki, a jest jakaś alternatywa do tego? nawet nie musi być w tym jakiegokolwiek makra

0

Nieważne już zrobiłem temat można zamknąć xd

1 użytkowników online, w tym zalogowanych: 0, gości: 1