Bondt met dt
[mod] 007 ½
Sinds 2/5/2003
T: 19
R: 715
|
26/11/2007 -
10:55u
| Quote
|
Kben aant proberen te programmeren in c++ maar nu stuit ik op een probleem!
Ik heb de volgende opbouw: in de main loop ik steeds een switch af met cases, dit gaat oneindig door. Na de cases wordt er steeds iets gecontroleerd met een functie. Nu is het de bedoeling dat ik bij die controle iets kan ophalen uit mijn klasse zodat ik in de main uit mijn while kan springen! Het probleem is dat ik geen data kan doorgeven via die functies (volgens mijne compiler) omdat het om 'void functies' gaat.
---------- main.cpp ----------
... while(1) {
switch() { case 1 doe.functie1(); case 2 doe.functie2(); case 3 doe.functie3(); ... } doe.check();
}
------- klasse -------
...
void functie1() { ... }
void functie2() { ... }
void functie3() { ... }
void check() { // hier moet ik iets terug sturen naar de main... maar hoe? Ik kan niet met "return variabele" beginnen omdat het een void functie is! }
|
Wimpie
wzl-lid
Sinds 24/9/2004
T:39 -
R:152
|
26/11/2007 -
11:35u
| Quote
|
volgens mijn beperkte kennis van C++ kan een void functie idd geen return doen... Vervang de void dus door iets anders (als ik nog wist wat zou ik het zeggen ) Google is your best friend...
edit: als ik mij niet vergis moet het dan iets zijn als public string (dus niet void) functienaam...
Laatst aangepast door
Wimpie
op 26/11/2007 11:36:08u
(1x aangepast)
|
D3ton8oR
Stella-man
Sinds 15/10/2003
T:32 -
R:1581
|
26/11/2007 -
12:18u
| Quote
|
idd, gewoon uw functie aanpassen..
Ipv "void check()" maak je er gewoon (veronderstellend dat je een string moet terugsturen.. werkt met alles eigenlijk: datatable, int, bool, ...) "private string check()" van of "private int check()"
zoiets dus:
Private bool Voorbeeld() { bool valid = true; if (tekstvak.text == string.empty) { valid = false; } return valid; }
(of public natuurlijk.. hangt er van af waar je ze nodig hebt)
en dan in je ontvangende zet je gewoon zoiets
... bool tekstvakisleeg;
tekstvakisleeg = Voorbeeld();
...
|
Zubzub
wzl-lid
Sinds 30/7/2005
T:2 -
R:176
|
26/11/2007 -
15:41u
| Quote
|
Ik weet niet hoe het in C++ zit maar als je je functie private maakt kan niemand behalve de klasse zelf ze oproepe d3t behalve als het gaat om een innerklasse natuurlijk.
De oplossing is gewoon je void aan te passen. Het type voor je functienaame (in dit geval void = leegte) duid aan wat de functie returned. Niets dus. Je main weet dus niet of de "check()" succesvol was of niet want er komt geen feedback.
ipv daarvan kan je er bvb van maken
public boolean check() { //als de voorwaarde voldaan is return true; //als het niet in orde is return false; }
en je main wordt dan: ---------- main.cpp ----------
... do {
switch() { case 1 doe.functie1(); case 2 doe.functie2(); case 3 doe.functie3(); ... }
}while(!doe.check())
op het einde van de lus wordt de check functie gecontrolleerd en de gereturnde waarde wordt omgedraaid (true wordt false, false wordt true). Immers, als doe.check() niet zou worden omgedraaid zou de lus blijven lopen en vice versa. Wat wij wille bereiken is net het omgekeerde, vandaar de ! operator voor de boolean waarde om te keren. (bij while(boolean){...} wordt de voorwaarde bij het aanvangen van de lus gecontrolleerd, bij do{...}while(boolean) wordt de voorwaarde op het einde van de lus gecontrolleerd.)
hf
Laatst aangepast door
Zubzub
op 26/11/2007 16:54:56u
(4x aangepast)
|
Bondt met dt
[mod] 007 ½
Sinds 2/5/2003
T:19 -
R:715
|
26/11/2007 -
16:34u
| Quote
|
Aight! Dat helpt me alweer een stukje vooruit!
Thnx0r!
|
D3ton8oR
Stella-man
Sinds 15/10/2003
T:32 -
R:1581
|
26/11/2007 -
19:34u
| Quote
|
Zubzub schreef: Ik weet niet hoe het in C++ zit maar als je je functie private maakt kan niemand behalve de klasse zelf ze oproepe d3t
ja da weet ik wist nie goe waar em ze nodig had, maar 't zal idd wsl een andere klasse zijn
|
Bondt met dt
[mod] 007 ½
Sinds 2/5/2003
T:19 -
R:715
|
12/12/2007 -
20:08u
| Quote
|
Terug aant cpp'en geslagen!
Ik heb een vreemd probleem nu...
Ik genereer een random getal voor persoon1 en persoon2. Toch bevaten persoon1 en persoon2 altijd hetzelfde getal...
De opbouw is als volgt:
MAIN.CPP
Doe persoon1; Doe persoon2;
persoon1.genereer(); persoon2.genereer();
cout << persoon1.getGetal(); // geeft bijvoorbeeld 5 cout << persoon2.getGetal(); // geeft dan ook 5 uit, da mag dus niet! 
CLASSES.H
class Doe {
public: doe(void); int getGetal(); void genereer();
}
CLASSES.CPP
int getal;
Doe :: Doe(void) // spaties na de :: anders komt er ne smiley hier  { }
void Doe::genereer() { srand ( time(NULL) ); getal = rand() % 10 + 1; cout << getal; // hier verschijnt wel 2x een ander getal bij het oproepen! }
int Doe::getGetal() { return getal; }
|
Fry
wzl-lid
Sinds 1/2/2006
T:2 -
R:36
|
13/12/2007 -
21:33u
| Quote
|
Even een vlugge uitleg die best wel eens fout zou kunnen zijn,
Random getallen genereren is niet makkelijk voor een computer en dus werken de meeste rand() functies met een algoritme die een pseudo-random reeks getallen genereert op basis van een algoritme. De getallen zijn op het eerste zicht volledig random maar zijn feitelijk gewoon bewerkingen op een zogenaamde "seed". Dus de random functie heeft een soort begingetal nodig (die "seed" en zal met eenzelfde begingetal steeds dezelfde reeks getallen na elkaar genereren.
Je zal dus ergens moeten aangeven met welk getal de rand() als feed moet gebruiken (neem voor de ene een getal gebaseerd op de systeemtijd en voor de andere de systeemtijd + 10 ofzo).
Ik zou ook fout kunnen zijn, maar C++ kennende zou dit wel eens juist kunnen zijn.
Laatst aangepast door
Fry
op 13/12/2007 21:34:22u
(1x aangepast)
|
Bondt met dt
[mod] 007 ½
Sinds 2/5/2003
T:19 -
R:715
|
17/12/2007 -
15:58u
| Quote
|
Spijker op de kop!
Merci!!
|