[ Príspevkov: 4 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.12.15
Prihlásený: 11.03.22
Príspevky: 21
Témy: 9 | 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)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3

Zbytočne to komplikuješ, nie? Urob to jednoducho http://www.learncpp.com/cpp-tutorial/812-static-member-functions/


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.12.15
Prihlásený: 11.03.22
Príspevky: 21
Témy: 9 | 9

Ť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;
}


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3

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!
 [ Príspevkov: 4 ] 


Ukazovatel clenskej statickej funckie a jej vyvolanie C++



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

C++ vyvolanie funkcie

v Assembler, C, C++, Pascal, Java

0

435

15.04.2020 22:32

michaleres

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.

C++ ukazovatel a odkaz

v Assembler, C, C++, Pascal, Java

13

1832

16.08.2010 11:58

Ďuri

V tomto fóre nie sú ďalšie neprečítané témy.

Ukazovatel a operator delete c++

v Assembler, C, C++, Pascal, Java

5

517

14.05.2016 20:50

BX

V tomto fóre nie sú ďalšie neprečítané témy.

zobrazenie statickej stranky

v Redakčné systémy

0

668

05.06.2009 12:58

frenkacik

V tomto fóre nie sú ďalšie neprečítané témy.

vytvorenie statickej ip adresy

v Sieťové a internetové programy

9

2068

26.03.2010 22:24

Tech

V tomto fóre nie sú ďalšie neprečítané témy.

vysvetlenie funckie pri registracii

v PHP, ASP

4

1233

05.03.2008 13:18

enorm

V tomto fóre nie sú ďalšie neprečítané témy.

funckie htmlentities() a formulare

v PHP, ASP

2

436

17.06.2008 14:25

mondzo

V tomto fóre nie sú ďalšie neprečítané témy.

OOP hodnota premennej z funckie

v PHP, ASP

1

289

27.10.2012 10:51

walther

V tomto fóre nie sú ďalšie neprečítané témy.

vyvolanie funkcie js. prr načítaní stránky

v JavaScript, VBScript, Ajax

11

812

31.03.2010 15:48

Ďuri

V tomto fóre nie sú ďalšie neprečítané témy.

Nefunguje ukazovateľ jasu

v Ostatné

2

410

15.08.2012 21:21

MiSCHo_20

V tomto fóre nie sú ďalšie neprečítané témy.

MiniAPP- Ukazovateľ ping

v Ostatné programy

6

430

08.01.2016 10:14

Lessik

V tomto fóre nie sú ďalšie neprečítané témy.

ukazovatel teploty :P

v Benchmarky a diagnostické programy

17

2568

02.09.2007 21:09

Jaro

V tomto fóre nie sú ďalšie neprečítané témy.

Ukazovateľ batérie (Ubuntu)

v Ostatné programy

3

633

28.11.2010 10:41

W.u.n.j.o

V tomto fóre nie sú ďalšie neprečítané témy.

upload skript - ukazovatel priebehu

v PHP, ASP

1

583

26.01.2009 17:44

emer

V tomto fóre nie sú ďalšie neprečítané témy.

softver - ukazovateľ skore na futbal

v Grafické programy

1

409

12.12.2014 9:16

don jebot

V tomto fóre nie sú ďalšie neprečítané témy.

Automaticky presúvať ukazovateľ myši na predvolené tlačidlo

v Operačné systémy Microsoft

0

454

06.06.2012 17:45

fagi853



© 2005 - 2024 PCforum, edited by JanoF