Beste proggers,
ik ben nog niet zo heel lang bezig met c++, dus het kan zijn dat ik iets triviaals over het hoofd zie, maar ik heb al een paar dagen getracht een oplossing te vinden, maar het lukt niet...
Het probleem:
Ik heb in een header (zeg network.h) een struct en een class (iets vereenvoudigde weergave, maar veel meer dan dit is het niet):
De constructor moet een netwerk creeren met een aantal computers (numcomps) en een aantal virussen (numvirs). M.a.w. ik wil kunnen aangeven in mijn hoofdprogramma hoe mijn (theoretische) netwerk eruit ziet,
Mijn implementatie van de constructor:
In het hoofdprogramma probeer ik vervolgens het netwerk op de volgende manier te initialiseren:
waarbij numofcomps en numofvirs uiteraard locale variabelen zijn van het juiste type en ook geinitialiseerd zijn.
Het probleem is dat het programma crashed op de resize van de vector isinfected in de constructor, en ik heb geen idee waarom...
Het gaat wel goed als ik geen
Als ik een vereenvoudigde versie direct in het hoofdprogramma implementeer gaat het wel goed.
Dus dit doet het wel:
Dit werkt gewoon zoals je zou verwachten.
Wie kan mij zeggen wat ik fout doe, want ik snap het niet meer...
Sorry voor de lange post, maar ik hoop dat het zo in ieder geval duidelijk is wat wel en niet goed gaat...
Alvast bedankt voor de moeite!
ik ben nog niet zo heel lang bezig met c++, dus het kan zijn dat ik iets triviaals over het hoofd zie, maar ik heb al een paar dagen getracht een oplossing te vinden, maar het lukt niet...
Het probleem:
Ik heb in een header (zeg network.h) een struct en een class (iets vereenvoudigde weergave, maar veel meer dan dit is het niet):
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| #ifndef NETWORK_H_ #define NETWORK_H_ #include <vector> struct Computer { std::vector<bool> isinfected; }; class Network { public: Network(int numcomps, char numvirs); ~Network(); private: char num_virs; int m_num_comps; Computer *complist; }; #endif /* NETWORK_H */ |
De constructor moet een netwerk creeren met een aantal computers (numcomps) en een aantal virussen (numvirs). M.a.w. ik wil kunnen aangeven in mijn hoofdprogramma hoe mijn (theoretische) netwerk eruit ziet,
Mijn implementatie van de constructor:
C++:
1
2
3
4
5
6
7
8
9
| Network::Network(int numcomps, char numvirs) { num_virs = numvirs; m_num_comps = numcomps; complist = new Computer[numcomps]; for (int i = 0; i < numcomps; ++i) { complist[i].isinfected.resize(numvirs,false); } } |
In het hoofdprogramma probeer ik vervolgens het netwerk op de volgende manier te initialiseren:
C++:
1
| Network compnetwork(numofcomps, numofvirs); |
waarbij numofcomps en numofvirs uiteraard locale variabelen zijn van het juiste type en ook geinitialiseerd zijn.
Het probleem is dat het programma crashed op de resize van de vector isinfected in de constructor, en ik heb geen idee waarom...
Het gaat wel goed als ik geen
C++:
gebruik in de struct maar bijvoorbeeld een 1
| std::vector isinfected |
C++:
(dus maar 1 virus mogelijk op het netwerk)1
| bool isinfected |
Als ik een vereenvoudigde versie direct in het hoofdprogramma implementeer gaat het wel goed.
Dus dit doet het wel:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| // include alles wat nodig is... struct Computer{ std::vector<bool> isinfected; }; int main(int argc, char **argv) { Computer *comp; comp = new computer[100]; for (int i = 0; i < 100; ++i) { comp[i].isinfected.resize(2,false); } comp[1].isinfected.at(0) = true; for (int i = 0; i < 100; ++i) { std::cout << comp[i].isinfected.at(0); } return 0; } |
Dit werkt gewoon zoals je zou verwachten.
Wie kan mij zeggen wat ik fout doe, want ik snap het niet meer...
Sorry voor de lange post, maar ik hoop dat het zo in ieder geval duidelijk is wat wel en niet goed gaat...
Alvast bedankt voor de moeite!