[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ó?????
- 2339 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
Igen ezt én is olvastam, de ilyenkor meg kellene hívódnia az osztály paraméter nélküli konstruktorának vagy nem??? A "myclass" egy osztály, nem pointer!!! Hogyan???
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
ez teljesen jó, ámde elég a következő, ha van default konstruktor:
class CMyClass {
static CMyClass myclass;
....
};
CMyClass::myclass;
- A hozzászóláshoz be kell jelentkezni
Így nem volt jó!!!!!
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni