C++: Statikus tagok és függvények

Fórumok

[code]

#ifdef HAVE_CONFIG_H
#include config.h
#endif

#include iostream
#include cstdlib
#include string

using namespace std;

class CMyClass {
int egesz;
static CMyClass myclass;
public:
CMyClass(int egesz=0) {this->egesz=egesz;}
~CMyClass() {;}
static CMyClass& getMyClass() {return myclass;}
};

int main(int argc, char *argv[])
{
cout << "Hello, world!" << endl;

CMyClass *my1 = new CMyClass();
CMyClass *my2 = &CMyClass::getMyClass();

return EXIT_SUCCESS;
}
[code/]

Fordítás és Hibaüzenet:
cd '/home/aperger/Data/KDevelop/hellocpp/debug' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake
gmake all-recursive
Making all in src
if g++ -DHAVE_CONFIG_H -I. -I/home/aperger/Data/KDevelop/hellocpp/src -I.. -O0 -g3 -MT hellocpp.o -MD -MP -MF ".deps/hellocpp.Tpo" -c -o hellocpp.o /home/aperger/Data/KDevelop/hellocpp/src/hellocpp.cpp; then mv -f ".deps/hellocpp.Tpo" ".deps/hellocpp.Po"; else rm -f ".deps/hellocpp.Tpo"; exit 1; fi
/bin/sh ../libtool --tag=CXX --mode=link g++ -O0 -g3 -o hellocpp hellocpp.o
mkdir .libs
g++ -O0 -g3 -o hellocpp hellocpp.o
hellocpp.o(.gnu.linkonce.t._ZN8CMyClass10getMyClassEv[CMyClass::getMyClass()]+0x4): In function `CMyClass::getMyClass()':
/home/aperger/Data/KDevelop/hellocpp/src/hellocpp.cpp:39: undefined reference to `CMyClass::myclass'
collect2: ld returned 1 exit status
gmake[2]: *** [hellocpp] Error 1
gmake[1]: *** [all-recursive] Error 1
gmake: *** [all] Error 2
*** A program kilépett, a visszaadott érték: 2 ***

Tud valaki segíteni mit csinálok rosszul?

A hiba üzenet ezt a sort adja hibásnak:
CMyClass *my2 = &CMyClass::getMyClass();

Ha elhagoym minden jó?????

Hozzászólások

Mivel van static adattagja az osztályodnak, annak rögtön az osztálydefiníció után értéket kellene adnod. Szerintem.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Hát, nem tudom biztosan. Nekem sincs sok tapasztalatom ilyen téren, talán próbáld meg így:

class CMyClass {
int egesz;
static CMyClass myclass;
public:
CMyClass(int egesz=0) {this->egesz=egesz;}
~CMyClass() {;}
static CMyClass& getMyClass() {return myclass;}
};

CMyClass::myclass = CMyClass();

Csak az a baj, hogy ez nem valami elegáns, hogy a myclass tag is tagja lesz saját magának... vagy mi. Legalábbis az osztálydefinícióból ez szűrhető le. Talán praktikusabb lenne picit másképpen megpróbálni.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Köszi a segítséget!!!


#ifdef HAVE_CONFIG_H
#include config.h
#endif

#include iostream
#include cstdlib
#include string

using namespace std;


class CMyClass {
  int egesz;
  static CMyClass myclass;
  public:
    CMyClass(int egesz=0) {this->egesz=egesz;}
    ~CMyClass() {;}
    static CMyClass& getMyClass() {return CMyClass::myclass;}
    int getEgesz() {return this->egesz;}
};

//Így kell értéket adni!!! Hülyeség, de kell. A Java-ban ez autómatikus!!!
CMyClass CMyClass::myclass = CMyClass();

int main(int argc, char *argv[])
{
  cout << "Hello, world!" << endl;


  CMyClass *my1 = new CMyClass(10);
  CMyClass *my2 = &CMyClass::getMyClass();
  cout << my1->getEgesz() << '\n' << my2->getEgesz() << '\n';
  
  return EXIT_SUCCESS;
}

Így már működik!!!
Kimenet:
Hello, world!
10
0
A továbblépéshez nyomja meg az Enter billentyűt.