Ondersteuning > Programmeren

C++ vraag

(1/2) > >>

SeySayux:
Hallo,

ik heb een paar problemen met het programmeren in C++. In java kan je vb doen:


--- Code: ---Object o;
//...
o = new Object();
--- Einde van code ---
Nu wil ik in C++ doen:


--- Code: ---QWidget * q;
//...
q = new QWidget;
--- Einde van code ---
maar dan krijg ik de volgende foutmelding:


--- Code: ---src/globals.h:7: error: expected constructor, destructor, or type conversion before '=' token
--- Einde van code ---
Ik gebruik de volgende versies van software:

--- Citaat ---gcc: i686-apple-darwin9-gcc-4.0.1
make: GNU Make 3.81, i386-apple-darwin9.0
qmake: QMake version 2.01a
qdevelop: version 0.25
--- Einde van citaat ---
Als het nodig is, kan ik de code van het gehele programma uploaden.

Alvast bedankt,

- SeySayux

profoX:
Ik zie niet echt iets fout daar, maar inderdaad lijkt het me beter als je het in zijn context plaatst, dus het hele programma.

SeySayux:
Je kan de code hier downloaden:

http://www.megafileupload.com/en/file/68483/syrpmbuild-zip.html

De bestanden die van belang zijn, zijn globals.h en globals.cpp, in Globals.h declareer ik Configuration * CONFIG; en in globals.cpp declareer ik CONFIG = new Configuration;

- SeySayux

profoX:
Als je globals.h include heb je misschien wel die CONFIG variabele, maar daar is dan niets aan toegewezen. Het is niet zo dat die .cpp file zomaar wordt uitgevoerd. Om een globale configuration class te hebben zou je eventueel een Singleton kunnen gebruiken (of een static class indien je geen slots e.d. nodig hebt, maar die wil je wel hebben)... of je herziet de structuur van je programma wat en maakt ergens in het begin (bv. in je main of core class) een Configuration object aan, die je dan eventueel doorgeeft aan de constructor van objecten zoals QMetaBar..

Andere opmerkingen:

* wist je dat dit appje meer dan 500 MB ram in beslag neemt tijdens het compileren door die reuzegrote opsomming bij die QStringList? :P Ik zou die dingen eerder uitlezen vanuit een tekstbestand ofzo
* als je iets inpakt zou ik dat in een aparte map doen, want nu deed ik 'unzip file.zip' en kwamen er allemaal losse bestanden in de map waar ik het uitpakte, dat was een beetje vervelend want dan moest ik ze allemaal afzonderlijk verwijderen
* als je objecten op de heap aanmaakt, zorg er dan ook voor dat die objecten allemaal gedeleted worden, bij Qt gebeurt dit inderdaad grotendeels automatisch, maar alleen als je de objecten een parent geeft

edit: ik ga ervan uit dat jij zelf wel zult/kunt googlen naar de zaken die ik heb opgenoemd, maar als je wat extra uitleg wil vraag je het maar hé, hoewel ik zelf natuurlijk ook geen expert C++/Qt ben.. het IRC kanaal #qt op irc.freenode.net en www.qtcentre.org zijn wel handige hulpmiddelen om hulp te vragen vind ik

SeySayux:
Hallo,

Ik heb het volgende al geprobeerd:

globals.h:

--- Code: ---#ifndef __GLOBALS_H__
#define __GLOBALS_H__
#include "configuration.h"

class Global {
public:
static Configuration * CONFIG;
};
#endif
--- Einde van code ---
globals.cpp:

--- Code: ---#include "globals.h"

Global::CONFIG = new Configuration;
--- Einde van code ---
Maar dan krijg ik dezelfde fout.

Over jou opmerkingen:
* Ik heb hier 2 GB ram, ik merk dat dus nog eens niet :P. Ik heb proberen uit te zoeken hoe ik iets van een tekstbestand kan lezen, maar er is geen goede manier om dat cross-platform te doen. Op Mac OS X zou ik bv. het tekstbestand willen halen uit de map "Resources", terwijl in Linux ik het zou willen halen uit "$dataroot/syrpmbuild" (dataroot is meestal /usr/share, maar dit kan normaal gezien veranderd worden)
* Sorry, meestal doe ik dit wel, maar ik had het snel ingepakt deze keer. Rechtsklikken -> inpakken als...
* Worden die objecten niet automatisch vewijderd als je het programma afsluit?

- SeySayux

Navigatie

[0] Berichtenindex

[#] Volgende pagina

Naar de volledige versie