| | |
| Stránka: 1 z 1
| [ Príspevkov: 4 ] | |
Autor | Správa |
---|
Registrovaný: 16.12.15 Prihlásený: 11.03.22 Príspevky: 21 Témy: 9 |
Ahojte neviem si už rady. Potrebujem zavolať ukazateľ na statickú funkciu, ktorá je súčasťou triedy. Pozeral som na internete všade možne ako som vedel a nič z toho mi nefunguje. Tu je môj kód. triedy.h Kód: #ifndef TRIEDY_H_ #define TRIEDY_H_
#include <iostream> #include <string> class A; typedef std::string(A::*staticPointFunc)(); typedef void(A::*staticPointFVoid)(); // funkcia ktoru chcem volat class A { private: std::string mText; public: A() { fu2 = &A::getSomeText; // funkcia ktoru chcem volat } static staticPointFunc f; static staticPointFVoid fu2; // funkcia ktoru chcem volat static std::string mSText;
// kod ...
void getSomeText() { std::cout << "getSomeText()\n"; mText = "text zmeneny"; update(); } void update() { mSText = mText; } };
class B { // kod .. };
#endif // !TRIEDY_H_ Source.cpp Kód: namespace NMS { std::string S; }
#include "triedy.h" std::string A::mSText; staticPointFVoid A::fu2;
int main() { A a; a.setText("Toto je text."); // A::fu2(); // nefunguje //A::*fu2(); // nefunguje //(A::*fu2)(); // nefunguje //a.fu2(); // nefunguje //a.*fu2(); // nefunguje //(a.*fu2)(); // nefunguje A::fu2; // nic sa neudeje a.fu2; // nic sa neudeje B b; b.getText3(); b.Show(); //std::cout << "\nToto je m = " << m << std::endl; return 0; } Všade kde je napísané "// nefunguje", mám z google ako by sa mala zavolať funkcia a jej možné varianty. Ale už len keď to napíšem, VStudio mi to rovno prodčiarkne ako chybný kód. Inak používam VS2015. Môj zámer je použiť túto statickú funkciu v inej triede, v tomto prípade v triede B. (ešte to tam nie je implementované z vyššie uvedeného dôvodu)
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 09.06.2017 7:54 | |
|
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 16.12.15 Prihlásený: 11.03.22 Príspevky: 21 Témy: 9 | Napísal autor témy Elendil: 09.06.2017 16:29 | |
|
Ťažko povedať. Ak by som si písal celý kód sám, tak to možno neriešim, ale pri použití externej knižnice, hľadám riešenia, ako oddeliť môj kód od knižnice, ktorá používa vlastný main loop. Takéto ukazovatele sa mi vidia ako najlepší spôsob, pretože ako statické metódy, tak si myslím že, aj statické ukazovatele na metódu sa môžu volať z kade chcem. Ale začínam mať pocit, že to asi tadeto nepôjde. Podarilo sa mi spojazdniť ukazovateľ na statickú metódu, kde už funguje Kód: (a.*fu2)(); problém ale je, že potrebujem k tomu už vytvorený objekt triedy A. Ja by som potreboval niečo ako A::fu2() kde fu2 je ukazovateľ na metódu. Tu je cely fungujúci kód, ak by to niekoho zaujímalo. Kód: triedy.h class A; typedef void(A::*staticPointFVoid)(); // fu2 FUNGUJE class A { private: std::string mText; public: typedef void(A::*staticF)(); /* kompilator hodi chybu ak sa priradi A::sF = &A::getSomeText; ak v typedef nie je napisane A::, cize typedef void(*staticF)(); */ static staticF sF(); static std::string mSText; void getSomeText() { std::cout << "getSomeText()\n"; } }; Kód: Source.cpp #include "triedy.h" std::string A::mSText; staticPointFVoid fu2; // fu2 FUNGUJE A::staticF A::sF() // sF FUNGUJE { return &getSomeText; } int main() { A a; fu2 = &A::getSomeText; // fu2 FUNGUJE a.setText("Toto je text."); (a.*fu2)(); // fu2 FUNGUJE A::staticF sFunc = A::sF(); // pouzitie sF() (a.*sFunc)(); // FUNGUJE len s pomocou (a.*funkcia) A::sF(); // NEFUNGUJE nic sa neudeje return 0; }
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 10.06.2017 18:16 | |
|
Ak si stiahol niečo, čo má vlastný main, tak to nie je knižnica. Druhá vec, ak chceš rozšíriť funkcionalitu nejakej existujúcej triedy, tak ju buď oddedíš, alebo urobíš wrapper. Nejaké ukazatele na metódy určite nie je cesta.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
| Stránka: 1 z 1
| [ Príspevkov: 4 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| C++ vyvolanie funkcie v Assembler, C, C++, Pascal, Java | 0 | 396 | 15.04.2020 22:32 michaleres | | C++ ukazovatel a odkaz v Assembler, C, C++, Pascal, Java | 13 | 1799 | 16.08.2010 11:58 Ďuri | | Ukazovatel a operator delete c++ v Assembler, C, C++, Pascal, Java | 5 | 490 | 14.05.2016 20:50 BX | | zobrazenie statickej stranky v Redakčné systémy | 0 | 646 | 05.06.2009 12:58 frenkacik | | vytvorenie statickej ip adresy v Sieťové a internetové programy | 9 | 2050 | 26.03.2010 22:24 Tech | | vysvetlenie funckie pri registracii v PHP, ASP | 4 | 1126 | 05.03.2008 13:18 enorm | | funckie htmlentities() a formulare v PHP, ASP | 2 | 413 | 17.06.2008 14:25 mondzo | | OOP hodnota premennej z funckie v PHP, ASP | 1 | 260 | 27.10.2012 10:51 walther | | vyvolanie funkcie js. prr načítaní stránky v JavaScript, VBScript, Ajax | 11 | 775 | 31.03.2010 15:48 Ďuri | | ukazovatel teploty :P v Benchmarky a diagnostické programy | 17 | 2547 | 02.09.2007 21:09 Jaro | | Ukazovateľ batérie (Ubuntu) v Ostatné programy | 3 | 597 | 28.11.2010 10:41 W.u.n.j.o | | Nefunguje ukazovateľ jasu v Ostatné | 2 | 380 | 15.08.2012 21:21 MiSCHo_20 | | MiniAPP- Ukazovateľ ping v Ostatné programy | 6 | 399 | 08.01.2016 10:14 Lessik | | upload skript - ukazovatel priebehu v PHP, ASP | 1 | 560 | 26.01.2009 17:44 emer | | softver - ukazovateľ skore na futbal v Grafické programy | 1 | 372 | 12.12.2014 9:16 don jebot | | Automaticky presúvať ukazovateľ myši na predvolené tlačidlo v Operačné systémy Microsoft | 0 | 399 | 06.06.2012 17:45 fagi853 |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|