abonnement Unibet Coolblue Bitvavo
pi_91221672
Je declareert in A_Class een member van type B_Class, terwijl het mogelijk is dat B_Class op dat moment nog niet gedefinieerd is. De compiler moet weten hoeveel geheugenruimte een object van een class en daarmee dus ook elke member van die class inneemt.

Als je dus dergelijke cross-references wilt toepassen dan moet je dat dus doen middels een pointer of een reference, daarvan ligt namelijk de hoeveelheid geheugenruimte gewoon vast. Je moet dan nog wel forward declaraties class A_class; en class B_class; invoegen.
  woensdag 12 januari 2011 @ 18:18:12 #277
189216 netolk
maar dan andersom
pi_91222422
quote:
1s.gif Op woensdag 12 januari 2011 18:02 schreef thabit het volgende:
Je declareert in A_Class een member van type B_Class, terwijl het mogelijk is dat B_Class op dat moment nog niet gedefinieerd is. De compiler moet weten hoeveel geheugenruimte een object van een class en daarmee dus ook elke member van die class inneemt.

Als je dus dergelijke cross-references wilt toepassen dan moet je dat dus doen middels een pointer of een reference, daarvan ligt namelijk de hoeveelheid geheugenruimte gewoon vast. Je moet dan nog wel forward declaraties class A_class; en class B_class; invoegen.
Ja die pointer heb ik... maar hoe kan ik een forward declaratie doen als het in een namespace staat?
Beware of the Raping Zebra's
pi_91223755
Kan dit niet gewoon?
1
2
3
namespace A {
    class A_Class;
}
En dan later gewoon nog een keer namespace A met definities erin.
  woensdag 12 januari 2011 @ 19:02:13 #279
189216 netolk
maar dan andersom
pi_91224618
nee, dan krijg ik een error in header A, dat _DINGES een incomplete type is
Beware of the Raping Zebra's
pi_91256129
quote:
1s.gif Op woensdag 12 januari 2011 19:02 schreef netolk het volgende:
nee, dan krijg ik een error in header A, dat _DINGES een incomplete type is
_Dinges moet natuurlijk wel een pointer of een reference zijn, zoals ik een paar posts terug heb uitgelegd.
  donderdag 13 januari 2011 @ 20:05:29 #281
189216 netolk
maar dan andersom
pi_91279667
quote:
1s.gif Op donderdag 13 januari 2011 11:22 schreef thabit het volgende:

[..]

_Dinges moet natuurlijk wel een pointer of een reference zijn, zoals ik een paar posts terug heb uitgelegd.
Ow hehe, vet stom vergeten het bestand op te slaan ofzo want nu doet ie het dus wel :)

hartstikke bedankt
Beware of the Raping Zebra's
pi_91822743
Ik had er al een topic voor geopend (voordat ik deze zag), maar hier dus nog een keer:

Ik krijg het niet voor elkaar om met std::ofstream.seekp() te werken. Ik krijg altijd een corrupt bestand. Het gaat mis bij de volgende code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
inline void file::write_part(segment *the_segment, ::nntp::decoded_article_ptr decoded)
{
    boost::mutex::scoped_lock   lock(write_mutex);  // make sure we are the only ones messing with segments
    std::string                 filename;           // cache file name
    std::string                 data;               // cache decoded data

    // get the filename and data from the decoded article
    decoded->filename(filename, false);
    decoded->data(data);

    // open file
    out_file.open(filename.c_str(), std::ios_base::binary | std::ios_base::out);

    // if it is a multipart binary, seek to the right position
    if (decoded->multipart())
        out_file.seekp(decoded->begin() - 1);

    // did we arrive at the right position?
    if (decoded->multipart() && out_file.tellp() != decoded->begin() - 1)
        std::cout << "File '" << filename << "', segment " << the_segment->segment_number() <<  " at position " << out_file.tellp() << ", expected to be at " << decoded->begin() - 1 << std::endl;

    // write the data
    out_file.write(data.c_str(), data.length());

    // close the file
    out_file.close();
}

Hou ik daarentegen het bestand open, en zoek ik niet in het bestand, dan gaat het wel goed. Ik moet dan alleen wel de netjes alles in de goede volgorde aan de functie aangeven. De volgende code werkt in dit geval dus wel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
inline void file::write_part(segment *the_segment, ::nntp::decoded_article_ptr decoded)
{
    boost::mutex::scoped_lock   lock(write_mutex);  // make sure we are the only ones messing with segments
    std::string                 filename;           // cache file name
    std::string                 data;               // cache decoded data

    // get the filename and data from the decoded article
    decoded->filename(filename, false);
    decoded->data(data);

    // open file if necessary
    if (!out_file.is_open())
        out_file.open(filename.c_str(), std::ios_base::binary | std::ios_base::out);

    // are we at the right spot?
    if (decoded->multipart() && out_file.tellp() != decoded->begin() - 1)
        std::cout << "File '" << filename << "', segment " << the_segment->segment_number() <<  " at position " << out_file.tellp() << ", expected to be at " << decoded->begin() - 1 << std::endl;

    // write the data
    out_file.write(data.c_str(), data.length());

    // close the file
    if (the_segment->segment_number() == segment_list.size())
        out_file.close();
}

Ik controleer hier dus of de write position correct is, door de uitkomst van tellp() te vergelijken met wat ik verwacht. Dit doe ik in het eerste geval ook, en na de seekp() werkt dit ook. Alleen, het eerste geval creëert een corrupt bestand en ik heb geen idee waar dat door kan komen. De reden dat ik dit werkend wil krijgen is dat dan de gegevens in willekeurige volgorde kunnen worden geschreven.

out_file is een member variabele van de class file, article is een smart pointer naar een gedecodeerd usenet artikel. Hoe krijg ik seekp() werkend?
One cannot make an omelette without
breaking eggs -- but it is amazing how
many eggs one can break without making
a decent omelette.
  maandag 24 januari 2011 @ 23:59:06 #283
189216 netolk
maar dan andersom
pi_91830006
misschien heb je hier iets aan?
http://www.cplusplus.com/reference/iostream/ostream/seekp/

krijg je ook een foutmelding (throw) zo ja welke?
Beware of the Raping Zebra's
pi_91832153
Lekker aan het crossposten op GoT? :P
pi_91835689
quote:
1s.gif Op maandag 24 januari 2011 23:59 schreef netolk het volgende:
misschien heb je hier iets aan?
http://www.cplusplus.com/reference/iostream/ostream/seekp/

krijg je ook een foutmelding (throw) zo ja welke?
Daar heb ik al gekeken. Kan daar niets vinden wat aangeeft waarom dit niet zou moeten werken.

Ik krijg geen foutmelding. Zoals ik al aangaf, tellp geeft in beide gevallen gewoon de juiste positie aan. Krijg ik die juiste positie echter door een seekp dan werkt het ineens niet.
quote:
1s.gif Op dinsdag 25 januari 2011 00:49 schreef TeringHenkie het volgende:
Lekker aan het crossposten op GoT? :P
Het beste van beide ;) ...
One cannot make an omelette without
breaking eggs -- but it is amazing how
many eggs one can break without making
a decent omelette.
  dinsdag 25 januari 2011 @ 09:06:13 #286
192481 Core2
Happiness is the road
pi_91836688
Het is een beetje lastig om daar uitspraken over te doen, aangezien er nogal wat afhankelijkheden aan die functie hangen. Daarnaast maak je gebruik van concurrency, als je ergens een lock vergeet te respecteren in een andere functie kan dat al invloed hebben natuurlijk.
pi_91858870
wat doet "->" precies? ik zie het vaak bij "this" gebruikt worden, maar ik weet niet precies wat het betekent :@.
Finally, someone let me out of my cage
pi_91859703
quote:
1s.gif Op dinsdag 25 januari 2011 18:44 schreef minibeer het volgende:
wat doet "->" precies? ik zie het vaak bij "this" gebruikt worden, maar ik weet niet precies wat het betekent :@.
a->b is hetzelfde als (*a).b (tenzij een van de operators overloaded is).
pi_91859895
quote:
1s.gif Op dinsdag 25 januari 2011 19:01 schreef thabit het volgende:

[..]

a->b is hetzelfde als (*a).b (tenzij een van de operators overloaded is).
ah, pointers he, ik dacht dat ik ze wel doorhad maar het blijft wennen...
bedankt :)
Finally, someone let me out of my cage
pi_91882099
Bedankt voor alle hulp iedereen, het probleem zat hem in het feit dat een bestaand bestand openen en daarin zoeken alles weggooit tenzij je het bestand ook met std::ios_base::in opent :) .
One cannot make an omelette without
breaking eggs -- but it is amazing how
many eggs one can break without making
a decent omelette.
  woensdag 26 januari 2011 @ 09:57:29 #291
192481 Core2
Happiness is the road
pi_91884269
quote:
14s.gif Op woensdag 26 januari 2011 07:42 schreef nightsleeper het volgende:
Bedankt voor alle hulp iedereen, het probleem zat hem in het feit dat een bestaand bestand openen en daarin zoeken alles weggooit tenzij je het bestand ook met std::ios_base::in opent :) .
WTF, heb je ergens een bron waar dit wordt uitgelegd? Dat is wel erg maf gedrag.
pi_91884807
quote:
1s.gif Op woensdag 26 januari 2011 09:57 schreef Core2 het volgende:

[..]

WTF, heb je ergens een bron waar dit wordt uitgelegd? Dat is wel erg maf gedrag.
http://stdcxx.apache.org/doc/stdlibug/30-3.html

Gewoon dat streamgedoe niet gebruiken, het voegt alleen maar een hoop ellende toe.
  woensdag 26 januari 2011 @ 20:37:09 #293
189216 netolk
maar dan andersom
pi_91910947
quote:
14s.gif Op woensdag 26 januari 2011 07:42 schreef nightsleeper het volgende:
Bedankt voor alle hulp iedereen, het probleem zat hem in het feit dat een bestaand bestand openen en daarin zoeken alles weggooit tenzij je het bestand ook met std::ios_base::in opent :) .
gebruik dan ook gewoon std::ifstream dan gaat het altijd goed
Beware of the Raping Zebra's
  donderdag 27 januari 2011 @ 13:28:37 #294
189216 netolk
maar dan andersom
pi_91938240
Hey Fokkers,
het wil weer eens niet lukken :(

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class BUILDING{
    //code
};
class StoreHouse:public BUILDING{
  // code
  public:
   unsigned get_Wood();
   unsigned get_Stone();
};

Building::StoreHouse *SHptr;
    Building::BUILDING *Bptr;;
    for(unsigned i = 0; i < _BUILDINGS.size();i++){
        if(_BUILDINGS[i].get_Name() == Names::nStoreHouse){ // checkt of het wel echt een StoreHouse is en geen ander gebouw
            *Bptr = _BUILDINGS[i];
            *SHptr = reinterpret_cast<Building::StoreHouse*>(Bptr);
            _WOOD += SHptr->get_Wood();
            _STONE += SHptr->get_Stone();
        }
    }

nu krijg ik dus de volgende fout melding:
1error: no match for 'operator=' in '*SHptr = (Building::StoreHouse*)Bptr'

ik snap dit niet want volgens deze link zou dit gewoon legaal moeten zijn... iemand een idee hoe ik dit kan oplossen?

[ Bericht 1% gewijzigd door netolk op 27-01-2011 13:33:33 (verkeerde fout code) ]
Beware of the Raping Zebra's
pi_91958378
1*SHptr = reinterpret_cast<Building::StoreHouse*>(Bptr);
Dat sterretje aan het begin hoort er niet.
  donderdag 27 januari 2011 @ 21:13:09 #296
189216 netolk
maar dan andersom
pi_91959570
quote:
1s.gif Op donderdag 27 januari 2011 20:52 schreef thabit het volgende:

[ code verwijderd ]

Dat sterretje aan het begin hoort er niet.
wtf, dat is gewoon dom van mij...

maar dat sterretje is nu dus weg en compileert het wel alleen loopt het programma vast op de eerder geposte code, direct na de reinterpret_cast
Beware of the Raping Zebra's
pi_91961746
Het probleem zit hem in
1*Bptr = _BUILDINGS[i];

Je roept hier een assignment operator aan, terwijl Bptr niet geinitialiseerd is. Kortom, je zit iets naar een min of meer random geheugenadres te kopieren. In plaats daarvan moet je
1Bptr = &(_BUILDINGS[i]);
doen. (Geen idee of die haakjes daar nodig zijn, te lui om op te zoeken. :P). Nog netter is het om zoveel mogelijk met references ipv pointers te werken, maar soit.
  vrijdag 28 januari 2011 @ 13:51:16 #298
189216 netolk
maar dan andersom
pi_91987377
quote:
1s.gif Op donderdag 27 januari 2011 21:45 schreef thabit het volgende:
Het probleem zit hem in

[ code verwijderd ]


Je roept hier een assignment operator aan, terwijl Bptr niet geinitialiseerd is. Kortom, je zit iets naar een min of meer random geheugenadres te kopieren. In plaats daarvan moet je

[ code verwijderd ]

doen. (Geen idee of die haakjes daar nodig zijn, te lui om op te zoeken. :P). Nog netter is het om zoveel mogelijk met references ipv pointers te werken, maar soit.
txs die haakjes hoeven niet :) maar waarom is het netter om met references te werken ipv met pointers?
Beware of the Raping Zebra's
  vrijdag 28 januari 2011 @ 13:56:45 #299
58834 Catbert
The evil HR Director.
pi_91987586
quote:
1s.gif Op vrijdag 28 januari 2011 13:51 schreef netolk het volgende:
txs die haakjes hoeven niet :) maar waarom is het netter om met references te werken ipv met pointers?
Tijdje terug maar AFAIK: Met references kun je niet goochelen, een pointer kun je echt overal naartoe laten wijzen. Je kunt met references dus minder snel fouten maken.
"[...] a large number of the teenagers claiming Asperger's are, in fact, merely dicks."
  vrijdag 28 januari 2011 @ 14:06:24 #300
189216 netolk
maar dan andersom
pi_91988030
quote:
1s.gif Op vrijdag 28 januari 2011 13:56 schreef Catbert het volgende:

[..]

Tijdje terug maar AFAIK: Met references kun je niet goochelen, een pointer kun je echt overal naartoe laten wijzen. Je kunt met references dus minder snel fouten maken.
ow zo, ik weet niet zo veel van reference maar die kan je dan ook gewoon als class.function() gebruiken? als class een reference is naar die class?
Beware of the Raping Zebra's
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')